Прямое соединение IPv6

Вот сценарий, который я в итоге использовал. Поскольку опция --volumeеще недоступна в стабильной версии, вместо нее я использовал команды pactl.

Это таймер обратного отсчета сна для DeaDBeeF. Он поддерживает все, кроме одной функции из моего скрипта Audacious. Они:

  • Выберите значение таймера обратного отсчета сна в графическом интерфейсе (kdialog)
  • Приостановить воспроизведение звука через X минут
  • Показывать оставшееся время в графическом интерфейсе (или через уведомления на рабочем столе)
  • Показать текущий уровень громкости в графическом интерфейсе
  • Постепенное уменьшение громкости в течение последних 10 минут
  • После приостановки воспроизведения сбросить уровень громкости до исходного значения
  • Разрешить сброс таймера обратного отсчета на новое значение без прерывания воспроизведения
  • Разрешить отмену таймера обратного отсчета без прерывания воспроизведения
  • Остановка воспроизведения вручную с помощью графического интерфейса таймера обратного отсчета
  • Если воспроизведение остановлено, снова начать воспроизведение с графического интерфейса таймера обратного отсчета

Код:

#!/bin/bash

echo "DeaDBeeF control version 0.9"
function_pid=0

echo "true" > /dev/shm/allow_resetting_pactl_volume

function get_default_sink_name() {
    pacmd stat | awk -F": " '/^Default sink name: /{print $2}'
}

function get_default_sink_volume() {
    pacmd list-sinks | awk '/^\s+name: /{indefault = $2 == "<'$(get_default_sink_name)'>"} /^\s+volume: / && indefault {print $5; exit}'
}

function set_default_sink_volume() {
    pactl set-sink-volume $(get_default_sink_name) "$1"
}
#source: https://unix.stackexchange.com/a/251920/15010

function music_sleep(){
    countdown=$(($1*60-1))
    datestop=$((`date +%s` + $countdown));
    echo "pausing DeaDBeeF in $1 minutes..."

    #begin reducing sound volume 10 minutes (600 sec) from end
    voldown=$(($datestop - 600))

    while [ "$datestop" -ge `date +%s` ]; do
        datestr=$(printf "%s" $(date -u --date @$(($datestop + 1 - `date +%s`)) +%H:%M:%S))
        echo -ne "$datestr\r";
        #echo "$datestr";
        kdialog --passivepopup "DeaDBeeF will pause in: $datestr" 3
        if [ $(</dev/shm/allow_resetting_pactl_volume) == "true" ]; then
            countdown_saved_pactl_volume=$(get_default_sink_volume)
            echo $countdown_saved_pactl_volume > /dev/shm/countdown_saved_pactl_volume
        fi
        if [ `date +%s` -ge "$voldown" ]; then
            echo "false" > /dev/shm/allow_resetting_pactl_volume
            #reduce volume in 40 steps of 2 = 80% reduction (starting at 100) over 10 min
            set_default_sink_volume "-2%"
            currvol=$(get_default_sink_volume)
            echo -ne "\t\tvolume = $currvol\r"
            #echo "volume = $currvol"
            kdialog --passivepopup "volume = $currvol" 3
        fi
        sleep 15
    done

    deadbeef --pause
    echo "DeaDBeeF paused at $(date)"

    countdown_saved_pactl_volume=$(</dev/shm/countdown_saved_pactl_volume)
    set_default_sink_volume "$countdown_saved_pactl_volume"
    echo "true" > /dev/shm/allow_resetting_pactl_volume
}

countdown_saved_pactl_volume=$(get_default_sink_volume)
echo $countdown_saved_pactl_volume > /dev/shm/countdown_saved_pactl_volume
echo "initial volume is: $countdown_saved_pactl_volume"

while true; do

    choice=$(kdialog --combobox "          DeaDBeeF Sleep Timer:          " "cancel" "stop" "5" "10" "15" "20" "25" "30" "35" "45" "45" "50" "60" "90" "120" "180" "360" "480" --default "30");
    retval="$?"

    if [ "$retval" -eq 0 ]; then
            if [ $function_pid -ne 0 ]; then
                    kill $function_pid
                    function_pid=0
                    echo "countdown process terminated..."
            fi

            if [ "$choice" == cancel ]; then
                    echo "countdown canceled by user at $(date)"
                    kdialog --passivepopup "countdown canceled" 5
            elif [ "$choice" == stop ]; then
                    deadbeef --stop
                    echo "DeaDBeeF playback stopped at $(date)"
                    kdialog --passivepopup "DeaDBeeF playback stopped" 5
            else
                    echo "countdown (re)set by user at $(date)"
                    kdialog --passivepopup "countdown started" 5
                    #audresult=$(audtool playlist-shuffle-status)
                    #if [ "$audresult" == "on" ]; then audtool playlist-shuffle-toggle; fi
                    isplaying=$(deadbeef --nowplaying-tf "%isplaying%")
                    ispaused=$(deadbeef --nowplaying-tf "%ispaused%")
                    echo "isplaying=$isplaying, ispaused=$ispaused"
                    if [[ "$isplaying" -ne 1 || "$ispaused" -eq 1 ]]; then deadbeef --play-pause; echo "playback started"; fi
                    music_sleep "$choice" &
                    function_pid=$!
                    echo "function_pid=$function_pid"
            fi
            countdown_saved_pactl_volume=$(</dev/shm/countdown_saved_pactl_volume)
            set_default_sink_volume "$countdown_saved_pactl_volume"
            echo "reset volume to: $countdown_saved_pactl_volume"
            allow_reset_saved_volume="true"
            echo "true" > /dev/shm/allow_resetting_pactl_volume

    elif [ "$retval" -eq 1 ]; then
            echo "exiting DeaDBeeFctl"
            break
    else
            kdialog --error "ERROR";
    fi;

done

rm /dev/shm/allow_resetting_pactl_volume
rm /dev/shm/countdown_saved_pactl_volume
1
14.05.2020, 05:30
1 ответ

Указание локальных адресов канала -как address%interfaceявляется нормальным и ожидаемым в IPv6. Именно так должны работать локальные IPv6-адреса link -.

Обычный метод для IPv6 заключается в настройке маршрутизатора для отправки объявлений маршрутизатора IPv6, которые включают информацию об используемом сетевом адресе и префиксе, а также о методах автоматической настройки адреса (. ] DHCPv6 и/или SLAAC ).

Если локальный префикс не -ссылки -имеет значение /64 или шире, а информация в объявлении маршрутизатора разрешает использование SLAAC, клиент может просто выбрать часть адреса хоста автоматически (на основе MAC-адрес сетевой карты в соответствии с EUI -64/RFC 4291, постоянный адрес конфиденциальности в соответствии с RFC 3972 и 7217 или временный адрес в соответствии с RFC 4941 ).

Если вам нужен локальный адрес не -link -при прямом соединении, вам, вероятно, следует использовать адреса ULA (, т.е.адреса в диапазонеfc00::/7). Это IPv6-эквивалент адресов RFC 1918. В IPv6 нормально и ожидается, что интерфейсу будет назначено несколько адресов IPv6, поэтому вы можете просто позволить автоопределению работать как обычно и настроить свою систему, чтобы всегда добавлять адрес ULA к сетевому интерфейсу для прямых подключений в качестве дополнения. на любые адреса, которые могут быть обнаружены автоматически -.

1
28.04.2021, 23:14

Теги

Похожие вопросы