जब हेडफोन काट दिया जाता है तो वीएलसी प्लेबैक को कैसे रोकें?


12

जब मेरे हेडफ़ोन को प्लग आउट किया जाता है तो वीएलसी के प्लेबैक को रोकना कैसे संभव है? मैं एएलएसए के माध्यम से वक्ताओं को म्यूट कर सकता हूं, लेकिन मैं प्लेबैक को रोकने के लिए प्लग ट्रिगर का उपयोग करना चाहता हूं, क्योंकि यह स्मार्टफोन में सामान्य रूप से होता है।


1
सूचना: लेखन के समय दूसरा उत्तर बहुत अधिक कुशल है: askubuntu.com/a/642898/20275
int_ua

जवाबों:


5

ठीक है, इसलिए मैंने यहां से जो कुछ सीखा है, उसके आधार पर , मैं एसीपीआई का उपयोग करते हुए एक नया तरीका आजमा रहा हूं।

  1. VLC को रोकने और रोकने के लिए एक स्क्रिप्ट बनाएं:

    sudo touch /etc/acpi/headphone_jack.sh
    sudo chmod +x /etc/acpi/headphone_jack.sh
    

    और इस फाइल पर निम्नलिखित स्थान दें:

    _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
    
  2. अब एक इवेंट ट्रिगर बनाते हैं ( vimअपने पसंदीदा टेक्स्ट एडिटर से बदलें ):

    sudo vim /etc/acpi/events/headphones
    

    और निम्नलिखित जोड़ें:

    event=jack/headphone
    action=/etc/acpi/headphone_jack.sh %e
    
  3. अंत में, ACPI डेमॉन को पुनः आरंभ करें:

    sudo service acpid restart
    

मुझे लगता है कि ठीक वही होना चाहिए जिसकी आपको आवश्यकता है, जिसमें कोई भी मतदान शामिल नहीं है। इस कार्यान्वयन के साथ एकमात्र दोष मुझे मिल सकता है यदि आपके पास एक ही समय में कई उपयोगकर्ता हैं जो VLC पर चल रहे हैं। मुझे लगता है कि इस मामले में, क्या हो सकता है कि यह दृष्टिकोण बेतरतीब ढंग से विराम देगा और उनमें से एक को फिर से शुरू करेगा (या यह शायद काम नहीं करेगा)।

ACPI इवेंट हैंडलिंग से संबंधित महत्वपूर्ण ज्ञान प्रदान करने के लिए @ Kudos से @int_ua और @Sneetsher को बड़ा। प्रक्रिया को सरल बनाने में मदद करने के लिए @ user3073656 तक भी अंगूठे।


1
DBUS की आवश्यकता वाले किसी भी कमांड को चलाने के लिए, आपको रनिंग डबस सत्र के पर्यावरण चर को निर्यात करना होगा। Sneetsher के जवाब पर जर्मर की टिप्पणी देखें।
daltonfury42

1
अच्छी तरह से देखा गया। यहाँ सबसे साफ तरीका है जो मैं ऐसा करने के लिए सोच सकता था। ऑटोस्टार्ट स्क्रिप्ट और व्हाट्सएप की कोई आवश्यकता नहीं है।
22

@ स्टंट, यह सबसे अच्छा तरीका है जिसे मैंने लक्ष्य ईएनवी प्राप्त करने के लिए देखा है। उपयोगकर्ता को उसी तरह प्राप्त करना संभव है, grep -z USER /proc/$_pid/environइसलिए यह मशीन के सभी उपयोगकर्ताओं के लिए काम करेगा (एकल रनिंग सत्र / vlc के साथ)। मैं ऐसे विकल्प की तलाश में था।
user.dz

@ स्नेचर: मीठा! अब बहुत अच्छा लग रहा है। यह कल रात मेरे दिमाग को पार कर गया, लेकिन मैं इसके बारे में स्पष्ट रूप से सोचने के लिए कल रात बहुत थक गया था। उस दिशा में धकेलने के लिए धन्यवाद।
स्टंट

1
आप अभी भी% e का उपयोग करके, और केवल एक स्क्रिप्ट फ़ाइल का उपयोग करके उत्तर को सुधार सकते हैं। देखें इस
daltonfury42

9

ठीक है, तो आपको इसके लिए कुछ चीजें करने की आवश्यकता होगी:

  1. पता लगाएं कि हेडफ़ोन अनप्लग कब हैं;
  2. (1) में घटना के बाद, वीएलसी को "ठहराव" कमांड भेजें;
  3. पता लगाएं कि कब हेडफ़ोन वापस प्लग इन किया गया है;
  4. में घटना (3) के बाद, वीएलसी को "प्ले" कमांड भेजें;

के लिए (1) और (3): आप यहाँ दिखाए गए का उपयोग कर सकते हैं । इस उत्तर में एक प्लग और अनप्लग्ड जैक के बीच अंतर खोजने के लिए एक छोटी प्रक्रिया है, और एक स्क्रिप्ट जिसे आप अपने मामले के अनुरूप संशोधित कर सकते हैं।

के लिए (2) और (4): आपको वीएलसी के डबस इंटरफेस का उपयोग करना चाहिए। प्रासंगिक कोड यह होना चाहिए:

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

इस संशोधित स्क्रिप्ट को अपने स्टार्टअप एप्लिकेशन में जोड़ें, और आप सेट हैं। मुझे लगता है कि आपको वही करना चाहिए जो आप करना चाहते थे।

पुनश्च - ध्यान दें कि ऐसा करने के लिए अधिक कुशल तरीके हैं, जैसे कि inotifyघटना परिवर्तनों का पता लगाने के लिए उपयोग करना (और शायद अन्य दृष्टिकोण भी), लेकिन यह आपको शुरू करना चाहिए (और अन्य मेरे कौशल स्तर और अनुभव से ऊपर हैं)। मुझे लगता है कि आप इस "हैकिश" दृष्टिकोण से शुरू कर सकते हैं, और यहां से निर्माण कर सकते हैं।


1
बहुत बहुत धन्यवाद, यह वास्तव में उपयोगी है। यदि कोई बेहतर उत्तर पोस्ट नहीं किया जाता है, तो मैं अंकों को पुरस्कृत करूँगा। केवल एक चीज जो मुझे पसंद नहीं है वह है लगातार मतदान, मैंने उसके लिए एक अलग प्रश्न बनाया है: askubuntu.com/questions/640741/…
int_ua

1
मैं उस सवाल का पालन करूंगा! मैं उस ज्ञान का उपयोग कर सकता था।
स्टंट

3
आप sleep 0.25अंत में जोड़ सकते हैं , जो एक दूसरे विलंब का एक चौथाई है। यह सीपीयू को आसान बनाता है और अभी भी काफी तेजी से काम करता है। मैं कभी-कभी अपनी स्वयं की लिपियों में भी इसका उपयोग करता हूं
सर्गी कोलोडियाज़नी

2
ACPI हेडफ़ोन को अनप्लग कर देता है, क्या आप इसे अपने उत्तर में जोड़ेंगे? askubuntu.com/a/642404/20275
int_ua

बहुत बढ़िया! मैं आज रात इसके साथ कुछ काम करूंगा।
स्टंट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.