Как приостановить воспроизведение VLC при отсоединении наушников?

Как можно приостановить воспроизведение VLC, когда мои наушники подключены? Я могу отключить громкоговорители через ALSA, но я хочу использовать триггер, чтобы остановить воспроизведение, как это обычно бывает в смартфонах.

1
задан 1 July 2015 в 00:36

1 ответ

Итак, вам нужно сделать несколько вещей для этого:

Обнаруживать, когда наушники отключены; После события в (1) отправьте команду «пауза» в VLC; Обнаруживать, когда наушники снова подключены; После события в (3) отправьте команду «play» в VLC;

Для (1) и (3): вы можете использовать то, что показано здесь. Этот ответ содержит небольшую процедуру для определения разницы между подключенным и отсоединенным разъемом и скриптом, который вы можете изменить, чтобы соответствовать вашему делу.

Для (2) и (4): вы должны использовать VLC Dbus. Соответствующий код должен быть следующим:

dbus-send --print-reply --session --dest=org.mpris.vlc /Player org.freedesktop.MediaPlayer.Pause

dbus-send --print-reply --session --dest=org.mpris.vlc /Player org.freedesktop.MediaPlayer.Play

Для паузы и воспроизведения соответственно.

Теперь о сценарий. В вашем случае это должно выглядеть примерно так:

#!/bin/bash
# This scripts detecs unplugging headphones.

oldstatus="unrelated string"
while [ 1 ]; do
    # The following line has to be changed depending on the difference (use diff) in '/proc/asound/card0/code#0'
    status=$(grep -A 4 'Node 0x16' '/proc/asound/card0/codec#0' |  grep 'Amp-Out vals:  \[0x80 0x80\]')
    if [ "$status" != "$oldstatus" ]; then
        if [ -n "$status" ]; then
            echo "Plugged in"
             dbus-send --print-reply --session --dest=org.mpris.vlc /Player org.freedesktop.MediaPlayer.Play
            oldstatus="$status"
        else
            echo "Unplugged"
            dbus-send --print-reply --session --dest=org.mpris.vlc /Player org.freedesktop.MediaPlayer.Pause
            oldstatus="$status"
        fi
    fi
    # Now sleep for 250 milli-seconds as per @Serg's request (who learnt if from @Fabby)
    # sleep is timer-based so doesn't use *any* processor cycles while sleeping.
    sleep 0.25
done

Добавьте этот модифицированный скрипт в свои приложения для запуска, и вы настроены. Я думаю, что он должен делать то, что вы хотели.

PS - Обратите внимание, что есть более эффективные способы сделать это, например, используя inotify для обнаружения изменений событий (и, возможно, даже других подходов), но это вам нужно начать (а остальные - выше моего уровня и опыта). Я полагаю, вы можете начать с этого «хакерского» подхода и построить отсюда.

9
ответ дан 24 May 2018 в 03:53
  • 1
    Большое спасибо, это действительно полезно. Я вознагражу очки в случае, если лучший ответ не будет опубликован. Единственное, что мне не нравится - это постоянный опрос, я создал для него отдельный вопрос: askubuntu.com/questions/640741/… – int_ua 25 June 2015 в 10:27
  • 2
    Я буду следовать этому вопросу! Я мог бы использовать это знание. – Stunts 25 June 2015 в 12:45
  • 3
    Вы можете добавить sleep 0.25 в конец, что составляет четверть секунды задержки. Это упрощает работу с процессором и все еще работает достаточно быстро. Я иногда использую это в своих собственных сценариях – Sergiy Kolodyazhnyy 29 June 2015 в 03:31
  • 4
    ACPI отключает наушники, добавите это в свой ответ? askubuntu.com/a/642404/20275 – int_ua 30 June 2015 в 14:36
  • 5
    Потрясающие! Сегодня я буду работать с ним. – Stunts 30 June 2015 в 18:02

Другие вопросы по тегам:

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