Próbuję zmusić laptopa do przełączenia dźwięku na HDMI po podłączeniu i powrotu do standardowego analogu po odłączeniu.
Skonfigurowałem regułę udev, aby uruchomić skrypt do wykonania przełączenia, ale mam problemy z uruchomieniem go:
- Wygląda na to, że dopóki nie wybiorę wyjścia HDMI Audio w Ustawieniach dźwięku, nie zostanie on rozpoznany jako dostępny zlew, również po wybraniu wyjścia HDMI Audio wyjście analogowe nie będzie już wyświetlane.
Zobacz poniżej:
# 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
Skrypt, którego używam, przełącza wyjście w następujący sposób:
#!/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
Skrypt wyświetla błąd dotyczący braku takiego zlewu, gdy uruchamiam go przed wybraniem HDMI w ustawieniach dźwięku.
sound
14.04
pulseaudio
hdmi
Kingamajick
źródło
źródło
Odpowiedzi:
Sprawdź dostępne karty i profile
Dodaj następujące polecenie do skryptu, aby zmienić profil przed ustawieniem domyślnego ujścia i przenoszenia strumieni
(Więc nie trzeba przełączać go ręcznie w Ustawieniach dźwięku)
Odniesienie:
pactl -h
Iman pactl
źródło
W oparciu o ten link i ten link ... przetestowałem i WORKS FINE ubuntu 14.04
powinieneś utworzyć regułę w
/etc/udev/rules.d/100-hdmi_sound.rules
z tej treści
następnie utwórz
z twoją treścią
Mam nadzieję, że mogę pomóc .. przepraszam za mój angielski. Mówiłem po hiszpańsku
źródło
Po tym miałem trochę problemów. Skopiowałem oryginalny skrypt i zmodyfikowałem go zgodnie z sugestią, a teraz działa.
Zamieszczam go tutaj, aby ułatwić innym osobom korzystanie.
Teraz chciałbym uruchomić go za pomocą udev, ale nie mam pojęcia, jak to zrobić.
źródło
Dostarczone skrypty nie działały dla mnie z udev po wyjęciu z pudełka na Ubuntu 14.04, musiałem dodać:
na początku przekonwertuj dwie komendy pacmd na pactl i na koniec uruchom skrypt za pomocą sudo -s -u (użytkownik) z reguły udev.
źródło
Cóż, wszystkie dostarczone skrypty nie działały dla mnie (Ubuntu 16.04), ale znalazłem ten wskaźnik aplikacji, który pozwala zmienić wyjście dźwięku za pomocą jednego kliknięcia:
https://github.com/lkettenb/sound-output-switcher
(uwaga: trzeba najpierw zainstalować pakiet appindicator:
sudo apt-get install python-appindicator
)Pomyślałem, że zostawię to tutaj innym, którzy mogą być w takiej samej sytuacji jak ja, mimo że jest to alternatywne rozwiązanie ... ale sprawia, że jest to dość łatwe i dyskretne ;-)
źródło
Znów inne rozwiązanie (przetestowane w 16.04) oparte na poprzednich, ale z pewnymi ulepszeniami, które działają przy użyciu odpowiedniego
pactl
wskazywania na właściwy serwer (można ulepszyć, aby automatycznie otrzymywać nazwy kart i profili, patrzpactl list
lubpactl info
na razie).Powiązana istota jest tutaj .
źródło
card0
ale któregoś dnia się zmienił,card1
więc zmieniłem skrypt, a następnego dnia zmieniłem z powrotem nacard0
. W końcu zmieniłem kod nacard*
i od tego czasu wszystko jest w porządku. Tylko jedna głowa, jeśli coś podobnego ci się stanie.Skrypty Udev działają jako root, ale musisz także wiedzieć, którego menedżera wyświetlania używasz. Te skrypty powinny działać, ale musisz upoważnić do tego menedżera wyświetlania.
Znajdź DM, którego używasz:
Zobacz opcję -auth, wyświetli się menedżer wyświetlania. Może to być sddm lub lightdm w najnowszych wydaniach Ubuntu.
Ten wiersz musi zostać wyeksportowany jako zmienna XAUTHORITY, jak poniżej:
na przykład może to być poprawny wynik:
/var/lib/mdm/:0.Xauth (będzie używany przez skrypt)
Tak powinien wyglądać twój skrypt:
Umożliwi to menedżerowi ekranu zmianę wyjścia HDMI. Postępuj zgodnie z instrukcjami, aby utworzyć pliki reguł udev i umożliwić wykonanie skryptu.
źródło