Kulaklığım takılı olduğunda VLC'nin çalınmasını duraklatmak nasıl mümkün olur? Hoparlörleri ALSA üzerinden sessize alabilirim, ancak çalmayı durdurmak için akıllı telefonlarda olduğu gibi fiş tetiği kullanmak istiyorum.
Kulaklığım takılı olduğunda VLC'nin çalınmasını duraklatmak nasıl mümkün olur? Hoparlörleri ALSA üzerinden sessize alabilirim, ancak çalmayı durdurmak için akıllı telefonlarda olduğu gibi fiş tetiği kullanmak istiyorum.
Yanıtlar:
Tamam, buradan öğrendiklerime dayanarak, ACPI kullanarak yeni bir yaklaşım deniyorum.
VLC'yi duraklatmak ve duraklatmak için bir komut dosyası oluşturun:
sudo touch /etc/acpi/headphone_jack.sh
sudo chmod +x /etc/acpi/headphone_jack.sh
ve bu dosyaya aşağıdakileri yerleştirin:
_pid=`pgrep vlc`
_pid="${_pid% *}"
DBUS_SESSION_BUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/$_pid/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'`
_username=`grep -z USER= /proc/$_pid/environ |sed 's/.*=//'`
if [ "$3" = unplug ]; then
su $_username -c "DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause"
else
su $_username -c "DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Play"
fi
Şimdi bir etkinlik tetikleyicisi oluşturalım ( vim
en sevdiğiniz metin düzenleyicisiyle değiştirin ):
sudo vim /etc/acpi/events/headphones
ve aşağıdakileri ekleyin:
event=jack/headphone
action=/etc/acpi/headphone_jack.sh %e
Son olarak, ACPI arka plan programını yeniden başlatın:
sudo service acpid restart
Ben hiçbir anket dahil olmadan tam olarak ne istediğinizi düşünüyorum. Bu uygulama ile bulabildiğim tek dezavantajı, aynı anda VLC çalıştıran birden fazla kullanıcı olması durumundadır. Sanırım bu durumda, bu yaklaşım bunlardan birini rastgele duraklatacak ve devam ettirecektir (veya işe yaramayabilir).
@İnt_ua ve @Sneetsher için Big Kudos, ACPI olay işleme hakkında bana önemli bilgiler verdi. Ayrıca prosedürü basitleştirmeye yardımcı olmak için @ user3073656'ya kadar başparmak alın.
grep -z USER /proc/$_pid/environ
böylece makinedeki tüm kullanıcılar için çalışır (tek çalışan oturum / vlc ile). Böyle bir seçenek arıyordum.
Tamam, bunun için birkaç şey yapmanız gerekecek:
(1) ve (3) için: Burada gösterilenleri kullanabilirsiniz . Bu yanıt, takılı ve çıkarılmamış bir jak arasındaki farkı bulmak için küçük bir yordam ile durumunuza uyacak şekilde değiştirebileceğiniz bir komut dosyası içerir.
(2) ve (4) için: VLC'nin Dbus arayüzünü kullanmalısınız. İlgili kod şu olmalıdır:
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
Sırasıyla duraklatma ve oynatma için.
Şimdi senaryo hakkında. Sizin durumunuzda şöyle görünmelidir:
#!/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
Bu değiştirilmiş komut dosyasını başlangıç uygulamalarınıza ekleyin, hazırsınız. Bence istediğini yapmalı.
Not - inotify
Olay değişikliklerini (ve belki de başka yaklaşımları) tespit etmek için kullanmak gibi bunu yapmanın daha etkili yollarının olduğunu unutmayın , ancak bu sizi başlatmalıdır (ve diğerleri beceri seviyemin ve deneyimimin üstünde). Sanırım bu "hackish" yaklaşımı ile başlayabilir ve buradan kurabilirsiniz.
sleep 0.25
Sonuna ikinci bir gecikmenin çeyreği olan a ekleyebilirsiniz . Bu, CPU'da rahatlar ve hala yeterince hızlı çalışır. Bunu bazen kendi