Итак, вам нужно сделать несколько вещей для этого:
Обнаруживать, когда наушники отключены; После события в (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 для обнаружения изменений событий (и, возможно, даже других подходов), но это вам нужно начать (а остальные - выше моего уровня и опыта). Я полагаю, вы можете начать с этого «хакерского» подхода и построить отсюда.
ты добавлен скрипт или программу для запуска процесса, который выдает сообщение "[Ф1]", пытается (и терпит неудачу), чтобы прочитать ответ, и снова просит. Исследовать с помощью [F2] и [Ф3]. Убить процесс запроса и исправить ваши скрипты.
ты добавлен скрипт или программу для запуска процесса, который выдает сообщение "Please type y to accept, n otherwise:", пытается (и терпит неудачу), чтобы прочитать ответ, и снова просит. Исследовать с помощью [F2] и pstree -a -c -l -p -u 1651. Убить процесс запроса и исправить ваши скрипты.
Вы добавили скрипт или программу в процесс запуска, который выдает сообщение «Please type y to accept, n otherwise:», пытается (и не удается) читать ответ и снова запрашивает. Исследуйте с помощью ps -ef и pstree -a -c -l -p -u 1651. Убейте запрос и исправьте сценарии запуска.
Чтобы узнать, что программа-нарушитель вызывает бесконечное использование цикла:
$ sudo time grep -rnw --exclude-dir={boot,dev,lib,media,mnt,proc,root,run,sys,/tmp,tmpfs,var} '/' -e 'Please type y to accept, n otherwise'Binary file /home/rick/.mozilla/firefox/3vkvi6ov.default/sessionstore-backups/recovery.jsonlz4 matches
Binary file /home/rick/.mozilla/firefox/3vkvi6ov.default/sessionstore-backups/recovery.baklz4 matches
Binary file /home/rick/.mozilla/firefox/3vkvi6ov.default/places.sqlite matches
Binary file /home/rick/.mozilla/firefox/3vkvi6ov.default/places.sqlite-wal matches
10.24user 11.60system 0:50.74elapsed 43%CPU (0avgtext+0avgdata 15268maxresident)k
16205768inputs+0outputs (0major+4553minor)pagefaults 0swaps
У меня нет такой же проблемы, поэтому три перечисленные программы не являются нарушителями.
Чтобы узнать, что программа-нарушитель вызывает бесконечное использование цикла:
$ sudo time grep -rnw --exclude-dir={boot,dev,lib,media,mnt,proc,root,run,sys,/tmp,tmpfs,var} '/' -e 'Please type y to accept, n otherwise'Binary file /home/rick/.mozilla/firefox/3vkvi6ov.default/sessionstore-backups/recovery.jsonlz4 matches
Binary file /home/rick/.mozilla/firefox/3vkvi6ov.default/sessionstore-backups/recovery.baklz4 matches
Binary file /home/rick/.mozilla/firefox/3vkvi6ov.default/places.sqlite matches
Binary file /home/rick/.mozilla/firefox/3vkvi6ov.default/places.sqlite-wal matches
10.24user 11.60system 0:50.74elapsed 43%CPU (0avgtext+0avgdata 15268maxresident)k
16205768inputs+0outputs (0major+4553minor)pagefaults 0swaps
У меня нет такой же проблемы, поэтому три перечисленные программы не являются нарушителями.
Чтобы узнать, что программа-нарушитель вызывает бесконечное использование цикла:
$ sudo time grep -rnw --exclude-dir={boot,dev,lib,media,mnt,proc,root,run,sys,/tmp,tmpfs,var} '/' -e 'Please type y to accept, n otherwise'Binary file /home/rick/.mozilla/firefox/3vkvi6ov.default/sessionstore-backups/recovery.jsonlz4 matches
Binary file /home/rick/.mozilla/firefox/3vkvi6ov.default/sessionstore-backups/recovery.baklz4 matches
Binary file /home/rick/.mozilla/firefox/3vkvi6ov.default/places.sqlite matches
Binary file /home/rick/.mozilla/firefox/3vkvi6ov.default/places.sqlite-wal matches
10.24user 11.60system 0:50.74elapsed 43%CPU (0avgtext+0avgdata 15268maxresident)k
16205768inputs+0outputs (0major+4553minor)pagefaults 0swaps
У меня нет такой же проблемы, поэтому три перечисленные программы не являются нарушителями.