যখন হেডফোন সংযোগ বিচ্ছিন্ন হয়ে যায় তখন কীভাবে ভিএলসি প্লেব্যাক থামবেন?


12

আমার হেডফোনগুলি প্লাগ আউট করা অবস্থায় কীভাবে ভিএলসি প্লেব্যাক থামানো সম্ভব? আমি ALSA এর মাধ্যমে স্পিকারগুলিকে নিঃশব্দ করতে পারি, তবে আমি স্মার্টফোনে যেমন স্বাভাবিক হয় তেমন প্লেব্যাক বন্ধ করতে প্লাগ ট্রিগার ব্যবহার করতে চাই।


1
বিজ্ঞপ্তি: দ্বিতীয় উত্তরটি লেখার সময় আরও বেশি দক্ষ: Askubuntu.com/a/642898/20275
int_ua

উত্তর:


5

ঠিক আছে, তাই আমি এখান থেকে যা শিখেছি তার ভিত্তিতে , আমি এসিপিআই ব্যবহার করে একটি নতুন পদ্ধতির চেষ্টা করছি।

  1. ভিএলসিকে বিরতি দেওয়া এবং আনপুজ করার জন্য একটি স্ক্রিপ্ট তৈরি করুন:

    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. শেষ পর্যন্ত, এসিপিআই ডেমন পুনরায় চালু করুন:

    sudo service acpid restart
    

আমি মনে করি আপনার পোলিং জড়িত না করে আপনার যা প্রয়োজন ঠিক তা হওয়া উচিত। এই প্রয়োগের সাথে আমি খুঁজে পেতে পারি কেবলমাত্র ত্রুটিটি যদি আপনার একই সাথে ভিএলসি চালিত একাধিক ব্যবহারকারী থাকে। আমি মনে করি, সেক্ষেত্রে কী ঘটতে পারে তা হল এই পদ্ধতির এলোমেলোভাবে তাদের মধ্যে একটিকে বিরতি দেওয়া এবং পুনরায় চালু করা হবে (বা এটি সম্ভবত কাজ করবে না)।

আমাকে এসিপিআই ইভেন্ট পরিচালনা সংক্রান্ত গুরুত্বপূর্ণ জ্ঞান প্রদানের জন্য @ ইন্দু_আউ এবং @ স্নিটারে বড় কুডোস। পদ্ধতিটি সরলকরণে সহায়তার জন্য @ ব্যবহারকারী 3073656 পর্যন্ত থাম্বও করুন।


1
যে কোনও কমান্ডের ডিবিইউএস দরকার তা চালাতে আপনাকে চলমান ডিবিএস সেশনের পরিবেশ পরিবর্তনশীল রফতানি করতে হবে। স্নিথেশরের উত্তরের বিষয়ে জার্মারের মন্তব্য দেখুন।
ডাল্টনফুরি 42

1
ভাল বিক্ষোভ. এটি করার জন্য আমি ভাবতে পারি এমন পরিষ্কার উপায়। অটোস্টার্ট স্ক্রিপ্ট এবং হোয়াট নোটের প্রয়োজন নেই।
স্টান্টস

@ সুনটস, লক্ষ্য ENV পেতে আমি এটিই দেখেছি সেরা পন্থা। এটি একইভাবে ব্যবহারকারীর পক্ষে পাওয়া সম্ভব grep -z USER /proc/$_pid/environযাতে এটি মেশিনে সমস্ত ব্যবহারকারীর জন্য কাজ করে (একক চলমান সেশন / ভিএলসি সহ)। আমি এই জাতীয় বিকল্প খুঁজছিলাম।
user.dz

@ স্নিটার: মিষ্টি! এখন অনেক বেশি ভাল লাগছে। এটি গত রাতে আমার মনটি অতিক্রম করেছে, তবে আমি স্পষ্টভাবে এটি সম্পর্কে চিন্তা করতে গত রাতে খুব ক্লান্ত হয়ে পড়েছিলাম। এই দিকে ধাক্কা দেওয়ার জন্য ধন্যবাদ।
স্টান্টস

1
আপনি এখনও% ই ব্যবহার করে এবং কেবল একটি একক স্ক্রিপ্ট ফাইল ব্যবহার করে উত্তরটি উন্নত করতে পারেন। এই দেখুন ।
ডাল্টনফুরি 42

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ইভেন্টের পরিবর্তনগুলি সনাক্ত করতে ব্যবহার করা (এবং সম্ভবত অন্যান্য পদ্ধতিরও হতে পারে) তবে এইটি আপনাকে শুরু করা উচিত (এবং অন্যরা আমার দক্ষতার স্তর এবং অভিজ্ঞতার aboveর্ধ্বে)। আমি মনে করি আপনি এই "হ্যাকিশ" পদ্ধতির সাহায্যে শুরু করতে পারেন এবং এখান থেকে তৈরি করতে পারেন।


1
অনেক ধন্যবাদ, এটি সত্যিই সহায়ক। এর চেয়ে ভাল উত্তর পোস্ট না হলে আমি পয়েন্টগুলি পুরষ্কার দেব। একমাত্র জিনিসটি আমি পছন্দ করি না তা হচ্ছে ধ্রুবক ভোটদান, আমি এর জন্য একটি পৃথক প্রশ্ন তৈরি করেছি: জিজ্ঞাসুবন্টু
int_ua

1
আমি যে প্রশ্ন অনুসরণ করব! আমি যে জ্ঞান ব্যবহার করতে পারে।
স্টান্টস

3
আপনি sleep 0.25শেষে একটি যোগ করতে পারেন , যা দ্বিতীয় বিলম্বের এক চতুর্থাংশ। এটি সিপিইউতে সহজ হয়ে যায় এবং এখনও যথেষ্ট দ্রুত কাজ করে। আমি এটি কখনও কখনও আমার নিজের স্ক্রিপ্টগুলিতেও ব্যবহার করি
সের্গি কলডিয়াজহনি

2
এসিপিআই হেডফোনগুলি আনপ্লাগল পরিচালনা করে, আপনি কি আপনার উত্তরে এটি যুক্ত করবেন? Askubuntu.com/a/642404/20275
int_ua

অসাধারণ! আমি আজ রাতে এটির সাথে কিছু কাজ করব।
স্টান্টস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.