এইচডিএমআই অডিওতে স্যুইচ করা যখন এইচডিএমআই একটি ল্যাপটপে প্লাগ ইন করা হয় (14.04)


12

আমি আমার ল্যাপটপটি যখন প্লাগ ইন করা হয় তখন অডিওটিকে এইচডিএমআইতে স্যুইচ করতে এবং যখন এটি সরানো হয় তখন স্ট্যান্ডার্ড অ্যানালগে ফিরে আসার চেষ্টা করছি।

স্যুইচিং সঞ্চালনের জন্য একটি স্ক্রিপ্ট ট্রিগার করতে আমি একটি ওদেব বিধি সেট আপ করেছি, তবে এটি কাজ করতে আমার সমস্যা হচ্ছে:

  • এটি প্রদর্শিত হয় যে আমি সাউন্ড সেটিংসে এইচডিএমআই অডিও আউটপুট নির্বাচন না করা পর্যন্ত এটি উপলব্ধ সিঙ্ক হিসাবে স্বীকৃত নয়, একবারে এইচডিএমআই অডিও আউটপুটটি নির্বাচিত হয়ে গেলে, এনালগ আউটপুট আর তালিকাভুক্ত হবে না।

নীচে দেখুন:

# HDMI plugged in, not selected in Sound settings.
$ pactl list short sinks 
5   alsa_output.pci-0000_00_1b.0.analog-stereo  module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
kingamajick@kingamajick-laptop: ~

# HDMI selected in sound settings    
$ pactl list short sinks 
7   alsa_output.pci-0000_00_1b.0.hdmi-stereo    module-alsa-card.c  s16le 2ch 48000Hz   SUSPENDED
kingamajick@kingamajick-laptop: ~

# HDMI removed
$ pactl list short sinks 
9   alsa_output.pci-0000_00_1b.0.analog-stereo  module-alsa-card.c  s16le 2ch 48000Hz   SUSPENDED

আমি যে স্ক্রিপ্টটি টগল আউটপুটটি ব্যবহার করছি তা নিম্নরূপ:

#!/bin/bash
HDMI_STATUS=`cat /sys/class/drm/card0/*HDMI*/status`
INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

if [ $HDMI_STATUS = "connected" ]
then
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.hdmi-stereo
    for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.hdmi-stereo  &> /dev/null; done
else
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
    for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.analog-stereo  &> /dev/null; done-server $PULSE_SERVER set-card-profile 0 output:analog-stereo+input:analog-stereo
fi

আমি যখন সাউন্ড সেটিংসে এইচডিএমআই নির্বাচন করার আগে স্ক্রিপ্টটি ট্রিগার করব তখন এ জাতীয় কোনও ডুব দেওয়া সম্পর্কে ত্রুটি দেয়।


2
কিছুদিন আগে এখানে একইরকম বিষয় ছিল : http://askubuntu.com/questions/317762/is-it-possible-to-automatic-switch-to-hdmi-sound-output-13-04 এখানে আলোচনার জন্য প্রতিক্রিয়া: http :
//lists.freedesktop.org/archives/pulseaudio-discuss/2012-

উত্তর:


9
  1. উপলব্ধ কার্ড এবং প্রোফাইলগুলির জন্য পরীক্ষা করুন

    pactl list cards
    
  2. ডিফল্ট সিঙ্ক এবং চলমান স্ট্রিম সেট করার আগে প্রোফাইলটি পরিবর্তন করতে স্ক্রিপ্টটিতে নিম্নলিখিত কমান্ড যুক্ত করুন

    pactl [options] set-card-profile  CARD PROFILE
    

(সুতরাং সাউন্ড সেটিংস থেকে এটি ম্যানুয়ালি স্যুইচ করার দরকার নেই)

রেফারেন্স:

pactl -h & man pactl


9

এই লিঙ্ক এবং এই লিঙ্কের উপর ভিত্তি করে ... আমি পরীক্ষা করেছি এবং ফাইন উবুন্টু 14.04 এ কাজ করেছি

আপনার একটি নিয়ম তৈরি করা উচিত /etc/udev/rules.d/100-hdmi_sound.rules

এই কন্টেন্ট সহ

SUBSYSTEM=="drm", ACTION=="change", RUN+="/lib/udev/hdmi_sound_toggle.sh"

তারপরে তৈরি করুন

sudo -H gedit /lib/udev/hdmi_sound_toggle.sh

আপনার কন্টেন্ট

#!/bin/bash

HDMI_STATUS=`cat /sys/class/drm/card0/*HDMI*/status`
INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
if [ $HDMI_STATUS = "connected" ]
then
    pactl set-card-profile 0 output:hdmi-stereo
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.hdmi-stereo
    for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.hdmi-stereo  &> /dev/null; done
else
    pactl set-card-profile 0 output:analog-stereo
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
    for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.analog-stereo  &> /dev/null; done
fi

আমি আশা করি .. আমার ইংরাজির জন্য দুঃখিত আমি স্প্যানিশ ভাষায় কথা বলতে পারি


4

এটি অনুসরণ করে আমার কিছুটা সমস্যা হয়েছিল। আমি মূল স্ক্রিপ্টটি অনুলিপি করেছি এবং এটি প্রস্তাবিত হিসাবে সংশোধন করেছি এবং এখন এটি কার্যকর হয়।

অন্য কারওর ব্যবহার সহজ করার জন্য আমি এটি এখানে অন্তর্ভুক্ত করছি।

#!/bin/bash
## From: /ubuntu/458194/switching-to-hdmi-audio-when-hdmi-is-plugged-into-a-laptop-14-04
## Script needs to be triggered by a udev rule
## Works manually now

##source ${HOME}/bin/bash_trace
HDMI_STATUS=`cat /sys/class/drm/card0/*HDMI*/status`
INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

if [ $HDMI_STATUS = "connected" ]
then
    pactl set-card-profile 0 output:hdmi-stereo
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.hdmi-stereo
    for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.hdmi-stereo  &> /dev/null; done
else
    pactl set-card-profile 0 output:analog-stereo
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
    for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.analog-stereo  &> /dev/null; done
fi

এখন, আমি কেবল এটি ওদেব দিয়ে ট্রিগার করতে চাই, তবে কীভাবে এটি করা যায় তা সম্পর্কে আমি নির্বোধ।


1
এটি 16.04 এ কাজ করে না। আমি আবার এটি নিয়ে কাজ করছি।
জো

3

প্রদত্ত স্ক্রিপ্টগুলি উবুন্টু ১৪.০৪-এর বাক্সের বাইরে উদেবের সাথে আমার পক্ষে কাজ করে নি, আমাকে যুক্ত করতে হয়েছিল:

export DISPLAY=:0

শুরুতে দুটি প্যাকএমডি কমান্ড প্যাকটলে রূপান্তর করুন এবং অবশেষে উদেব নিয়ম থেকে sudo -s -u (ব্যবহারকারী) ব্যবহার করে স্ক্রিপ্টটি চালান।

#!/bin/bash
## From: /ubuntu/458194/switching-to-hdmi-audio-when-hdmi-is-plugged-into-a-laptop-14-04
## Script needs to be triggered by a udev rule
## Works manually now

export DISPLAY=:0

##source ${HOME}/bin/bash_trace
HDMI_STATUS=`cat /sys/class/drm/card0/*HDMI*/status`
INPUTS=($(pactl list sink-inputs | grep Input | awk '{print $3}' | sed -r 's/^.{1}//')

if [ $HDMI_STATUS = "connected" ]
then
    pactl set-card-profile 0 output:hdmi-stereo
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.hdmi-stereo
    for i in ${INPUTS[*]}; do pactl move-sink-input $i alsa_output.pci-0000_00_1b.0.hdmi-stereo  &> /dev/null; done
else
    pactl set-card-profile 0 output:analog-stereo
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
    for i in ${INPUTS[*]}; do pactl move-sink-input $i alsa_output.pci-0000_00_1b.0.analog-stereo  &> /dev/null; done
fi

2

ঠিক আছে, সমস্ত সরবরাহিত স্ক্রিপ্টগুলি আমার পক্ষে কার্যকর হয়নি (উবুন্টু ১.0.০৪), তবে আমি এই অ্যাপ্লিকেশন সূচকটি পেয়েছি যা আপনাকে কেবল একটি ক্লিকে শব্দ আউটপুট পরিবর্তন করতে দেয়:

https://github.com/lkettenb/sound-output-switcher

(দ্রষ্টব্য: আপনাকে প্রথমে অ্যাপিনডিকেটর প্যাকেজ ইনস্টল করতে হবে sudo apt-get install python-appindicator:)

ভেবেছিলাম আমি এটি অন্যদের জন্য ছেড়ে চলে যেতে পারি যারা আমার মতো একই পরিস্থিতিতে থাকতে পারে যদিও এটি একটি বিকল্প সমাধান ... তবে এটি এটি বেশ সহজ করে তোলে এবং এটি বিযুক্ত ;-)


0

আগেরটির ভিত্তিতে আবারও একটি সমাধান (16.04-এ কাজ করে পরীক্ষিত) তবে কিছু উন্নতি যা pactlসঠিক সার্ভারের দিকে সঠিক পয়েন্টিং ব্যবহার করে কাজ করে (এটি স্বয়ংক্রিয়ভাবে কার্ড এবং প্রোফাইলের নাম পেতে উন্নত হতে পারে, এখনই উল্লেখ করুন pactl listবা উল্লেখ করুন pactl info)।

#!/bin/bash

USER_NAME=$(who | grep tty$(sudo fgconsole) | cut -f1 -d' ')
USER_ID=$(id -u "$USER_NAME")
HDMI_STATUS=$(</sys/class/drm/card0/*HDMI*/status)

HDMI_CARD="pci-0000_00_03.0"
HDMI_PROFILE="hdmi-stereo-extra1"

INTERNAL_CARD="pci-0000_00_1b.0"
INTERNAL_PROFILE="analog-stereo"

export LANG=C
export PULSE_SERVER="unix:/run/user/$USER_ID/pulse/native"

function pactl_cmd() {
  sudo -u $USER_NAME pactl --server $PULSE_SERVER $*
}

if [ "$HDMI_STATUS" = "connected" ]; then
  CARD=$HDMI_CARD
  OUTPUT=$HDMI_PROFILE
else
  CARD=$INTERNAL_CARD
  OUTPUT=$INTERNAL_PROFILE
fi

pactl_cmd set-default-sink alsa_output.$CARD.$OUTPUT
pactl_cmd set-card-profile alsa_card.$CARD output:$OUTPUT

INPUTS=($(pactl_cmd list sink-inputs | grep "^Sink Input #"|cut -d# -f2))
for i in ${INPUTS[*]}; do
  pactl_cmd move-sink-input $i alsa_output.$CARD.$OUTPUT
done

সম্পর্কিত টুকরা এখানে


আমার অনুরূপ স্ক্রিপ্ট ছিল যা ব্যবহার করে কাজ করেছিল card0তবে একদিন এটি স্যুইচ হয়েছিল card1তাই আমি স্ক্রিপ্টটি পরিবর্তন করেছিলাম পরের দিন এটি আবার বদলে যায় card0। শেষ পর্যন্ত আমি কোডটি পরিবর্তন করেছিলাম card*এবং তারপরে সব ঠিক আছে। আপনার সাথে যদি এরকম কিছু ঘটে থাকে তবে কেবল মাথা তুলে।
WinEunuuchs2Unix

0

উদেব স্ক্রিপ্টগুলি রুট হিসাবে চালিত হয় তবে আপনি কোন ডিসপ্লে ম্যানেজারটি ব্যবহার করছেন তাও আপনাকে জানতে হবে। এই স্ক্রিপ্টগুলির কাজ করা উচিত তবে এটি করার জন্য আপনাকে অবশ্যই ডিসপ্লে ম্যানেজারকে অনুমোদিত করতে হবে।

আপনি যে ডিএম ব্যবহার করছেন তা সন্ধান করুন:

pgrep -a Xorg

-উথ অপশনটি দেখুন, এটি আপনাকে ডিসপ্লে ম্যানেজারটি প্রদর্শন করবে। এটি সর্বশেষতম উবুন্টু প্রকাশে এসডিডিএম বা লাইটডিএম হতে পারে।

এই লাইনটি অবশ্যই XAUTHORITY ভেরিয়েবল হিসাবে রফতানি করতে হবে:

ls /car/run/sddm*

উদাহরণস্বরূপ, এটি একটি বৈধ আউটপুট হতে পারে:

/var/lib/mdm/:0.Xauth (এটি স্ক্রিপ্ট দ্বারা ব্যবহৃত হবে)

আপনার স্ক্রিপ্টটি অবশ্যই দেখতে হবে:

#!/bin/bash
export DISPLAY=:0
export XAUTHORITY=`ls /var/run/sddm*`
HDMI_STATUS="$(cat /sys/class/drm/card0-HDMI-A-1/status)"
USER=`whoami`
export XAUTHORITY=/home/$USER/.Xauthority
export DISPLAY=:0

if [ "$HDMI_STATUS" = connected ];
then
    sudo -u $USER pactl set-card-profile 0 output:hdmi-stereo+input:analog-stereo
else
    sudo -u $USER pactl set-card-profile 0 output:analog-stereo+input:analog-stereo
fi
exit 0

এটি আপনার ডিসপ্লে ম্যানেজারকে এইচডিএমআই আউটপুট পরিবর্তন করতে দেবে। উদেব নিয়ম ফাইলগুলি তৈরি করতে এবং স্ক্রিপ্টটি সম্পাদনযোগ্য করে তোলার লক্ষ্যে অনুসরণ করুন।

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