Mam konfigurację podwójnego ekranu na moim laptopie (używając 12.04 LTS) za pomocą wyświetlacza podłączonego przez HDMI. Wszystko działa dobrze, ale za każdym razem, gdy podłączam / odłączam kabel, muszę przejść do Preferencji dźwięku i ręcznie zmienić urządzenie wyjściowe dźwięku.
Czy jest jakiś sposób na zmianę urządzenia wyjściowego dźwięku po podłączeniu / odłączeniu kabla, więc kiedy podłączam mój wyświetlacz, wyjście dźwięku jest ustawione na HDMI, a kiedy go odłączam, dźwięk wraca do głośników laptopa?
Odpowiedzi:
Z korzyścią dla ludzi, którzy natkną się na to pytanie - rozwiązanie Salem prawie dla mnie zadziałało w 13.04, skończyło się na zbieraniu kawałków z całej sieci, myślę, że przełomem dla mnie był brak zmiennej środowiskowej PULSE_SERVER
Oto moje pełne rozwiązanie, które w zasadzie powtarza rozwiązanie Salema z kilkoma brakującymi elementami. Zredagowałem go również jako skrypt powłoki (pomimo mojej miłości do Pythona), ponieważ początkowo obawiałem się, że mój skrypt w Pythonie ma problemy ze ścieżką importu:
(to samo co odpowiedź Salema) Utwórz plik
/etc/udev/rules.d/hdmi_sound.rules
jako root z zawartością:Utwórz plik
/usr/local/bin/hdmi_sound_toggle
jako root z zawartością:Następnie uczyń go wykonywalnym za pomocą
chmod 0755 /usr/local/bin/hdmi_sound_toggle
Próbowałem uczynić ten skrypt tak ogólnym, jak to możliwe, ale nadal może być konieczna zmiana niektórych wierszy, takich jak ścieżka pliku HDMI_STATUS lub użyte profile. Możesz zobaczyć listę profili, uruchamiając
pactl list cards
i przeglądając profile.Zauważ, że skrypt nie powiódł się, gdy usunąłem słowo kluczowe „eksport” podczas ustawiania PULSE_SERVER, myślę, że pactl szuka zmiennej env
Nie zapomnij załadować ponownie reguł udev:
sudo udevadm control --reload-rules
Zaktualizuj ten skrypt został zaktualizowany do wersji 14.04. Wcześniej wszędzie używałbyś USER_NAME zamiast USER_ID
źródło
| uniq
do polecenia USER_NAME. Pamiętaj również, że ustawienia dźwięków w Ubuntu mogą wprowadzać w błąd. Nie widziałem zmian w panelu ustawień dźwięku, ale gdy coś odtwarzałem, dźwięk przełączał się płynnie tam iz powrotem. Zauważyłem też, że po kilkukrotnym podłączeniu i odłączeniu HDMI skrypt przestał działać (może trochę rodzaj błędu w udev).| sort -u
do nazwy użytkownika, ponieważ mówiono o dodatkowej opcji elemer elemer --- Moja nazwa użytkownika. To samo co rozwiązanie FuegoFro na koniec dnia.| grep -v pts
, ponieważ faktycznie mam tam również użytkownika root, ponieważ edytowałem skrypt za pomocą Kate, która miała otwarty terminal root.W końcu udało mi się sprawić, by ta praca działała
udev
. Jeśli więc ktoś chce mieć takie samo zachowanie, wykonaj następujące czynności:Najpierw musimy utworzyć plik
/etc/udev/rules.d/hdmi_sound.rules
o następującej treści:Spowoduje to
udev
wykonanie skryptu zahdmi_sound_toggle
każdym razem, gdy nastąpi zmiana połączenia HDMI. Ten skrypt musi mieć uprawnienia do wykonywania, a jego zawartość jest następująca:Prawdopodobnie można to łatwo zrobić w bash, ale ponieważ moim głównym językiem jest python, użyłem go. Wszystko działa oprócz powiadomienia: nie pokazuje się, naprawdę nie wiem dlaczego. Jeśli ktoś wie, jak to naprawić, proszę coś powiedzieć.
Uwaga: nazwy reguły skryptu / udev można zmienić, ale musisz użyć pełnej ścieżki.
źródło
Na podstawie Salem „s odpowiedź i Daniel odpowiedź” s
Wziąłem odpowiedź Salema i Daniela i wprowadziłem niezbędne zmiany, ich rozwiązanie nie zadziałało dla mnie po wyjęciu z pudełka:
(podobnie jak odpowiedź Salema).
Utwórz plik
/etc/udev/rules.d/hdmi_sound.rules
jako root z zawartością:Uwaga
ACTION=="change",
brakuje!Utwórz plik
/usr/local/bin/hdmi_sound_toggle
jako root z zawartością:Uwaga USER_NAME =
who | grep "(:0)" | cut -f 1 -d ' '| sort -u
Dodałem,| sort -u
ponieważ w przeciwnym razie wrócił zelemer elemer elemer
3 - moją nazwą użytkownika.Następnie uczyń go wykonywalnym za pomocą
chmod 0755 /usr/local/bin/hdmi_sound_toggle
Nie zapomnij załadować ponownie reguł udev:
sudo udevadm control --reload-rules
Ważne: ten skrypt został zaktualizowany do wersji 14.04. Wcześniej wszędzie używałbyś USER_NAME zamiast USER_ID
Kredyty: Salem i Daniel .
źródło
Ubuntu 16.04 - 17.04 Odpowiedź
Działa to w systemie Ubuntu 16.04 - 17.04, który wprowadził błąd w Pulse Audio 8. Utwórz plik
hotplugtv
(lubhotplug-hdmi
jeśli wolisz) i skopiuj w następujących wierszach:WAŻNE: zmień nazwę użytkownika „rick” na swoją nazwę użytkownika.
Aby wywołać ten skrypt z
udev
wydarzeń typu hot-plug, utwórz plik/etc/udev/rules.d/99-hotplugtv.rules
zawierający:Przejdź
/home/rick/bin/
do ścieżki, w której umieściłeśhotplugtv
skrypt.źródło