Ocena wątku:
  • 1 głosów - średnia: 5
  • 1
  • 2
  • 3
  • 4
  • 5
Tutorial Automatyczne przełączenie dźwięku na HDMI
#1
1
Better response on post Automatyczne przełączenie dźwięku na HDMI.Standardowo, po instalacji systemu jeśli chcemy przełączyć obraz i dźwięk na, np. telewizor przez port HDMI, z obrazem zasadniczo nie ma większego problemu. Dźwięk natomiast musimy ręcznie przełączyć w applecie "Dźwięk".
Jest sposób aby dźwięk przełączał się automatycznie (jak w Windows) po podpięciu wtyczki HDMI do komputera.
Oto on.

UWAGA! Komendy terminala przedstawione są w "nowej wersji", jakiej Mint używa od wydania 19.0.

Sprawdzamy, jaką mamy kartę dźwiękową w komputerze:
Kod:
pactl list cards

Powinno pojawić się coś podobnego w terminalu:
Cytat:jw@MINT ~ $ pactl list cards
0. karta
  Nazwa: alsa_card.pci-0000_00_1b.0
  Sterownik: module-alsa-card.c
  Właściciel modułu: 6
  Właściwości:
     alsa.card = "0"
     alsa.card_name = "HDA Intel PCH"
     alsa.long_card_name = "HDA Intel PCH at 0xd3610000 irq 29"
     alsa.driver_name = "snd_hda_intel"
     device.bus_path = "pci-0000:00:1b.0"
     sysfs.path = "/devices/pci0000:00/0000:00:1b.0/sound/card0"
     device.bus = "pci"
     device.vendor.id = "8086"
     device.vendor.name = "Intel Corporation"
     device.product.id = "1e20"
     device.product.name = "7 Series/C210 Series Chipset Family High Definition Audio Controller"
     device.form_factor = "internal"
     device.string = "0"
     device.description = "Wbudowany dźwięk"
     module-udev-detect.discovered = "1"
     device.icon_name = "audio-card-pci"
  Profile:
     input:analog-stereo: Wejście Analogowe stereo (odpływy: 0, źródła: 1, priorytet: 60, dostępne: tak)
     output:analog-stereo: Wyjście Analogowe stereo (odpływy: 1, źródła: 0, priorytet: 6000, dostępne: tak)
     output:analog-stereo+input:analog-stereo: Analogowy dupleks stereo (odpływy: 1, źródła: 1, priorytet: 6060, dostępne: tak)
     output:hdmi-stereo: Wyjście Digital Stereo (HDMI) (odpływy: 1, źródła: 0, priorytet: 5400, dostępne: tak)
     output:hdmi-stereo+input:analog-stereo: Wyjście Digital Stereo (HDMI) + Wejście Analogowe stereo (odpływy: 1, źródła: 1, priorytet: 5460, dostępne: tak)
     output:hdmi-surround: Wyjście Digital Surround 5.1 (HDMI) (odpływy: 1, źródła: 0, priorytet: 300, dostępne: tak)
     output:hdmi-surround+input:analog-stereo: Wyjście Digital Surround 5.1 (HDMI) + Wejście Analogowe stereo (odpływy: 1, źródła: 1, priorytet: 360, dostępne: tak)
     output:hdmi-surround71: Wyjście Digital Surround 7.1 (HDMI) (odpływy: 1, źródła: 0, priorytet: 300, dostępne: tak)
     output:hdmi-surround71+input:analog-stereo: Wyjście Digital Surround 7.1 (HDMI) + Wejście Analogowe stereo (odpływy: 1, źródła: 1, priorytet: 360, dostępne: tak)
     off: Wyłączone (odpływy: 0, źródła: 0, priorytet: 0, dostępne: tak)
  Aktywny profil: output:analog-stereo
  Porty:
     analog-input-internal-mic: Wewnętrzny mikrofon (priority: 8900, latency offset: 0 usec)
        Właściwości:
           device.icon_name = "audio-input-microphone"
        Część profilu: input:analog-stereo, output:analog-stereo+input:analog-stereo, output:hdmi-stereo+input:analog-stereo, output:hdmi-surround+input:analog-stereo, output:hdmi-surround71+input:analog-stereo
     analog-input-mic: Mikrofon (priority: 8700, latency offset: 0 usec, not available)
        Właściwości:
           device.icon_name = "audio-input-microphone"
        Część profilu: input:analog-stereo, output:analog-stereo+input:analog-stereo, output:hdmi-stereo+input:analog-stereo, output:hdmi-surround+input:analog-stereo, output:hdmi-surround71+input:analog-stereo
     analog-output-speaker: Głośniki (priority: 10000, latency offset: 0 usec)
        Właściwości:
           device.icon_name = "audio-speakers"
        Część profilu: output:analog-stereo, output:analog-stereo+input:analog-stereo
     analog-output-headphones: Słuchawki (priority: 9000, latency offset: 0 usec, not available)
        Właściwości:
           device.icon_name = "audio-headphones"
        Część profilu: output:analog-stereo, output:analog-stereo+input:analog-stereo
     hdmi-output-0: HDMI / DisplayPort (priority: 5900, latency offset: 0 usec, not available)
        Właściwości:
           device.icon_name = "video-display"         Część profilu: output:hdmi-stereo, output:hdmi-stereo+input:analog-stereo, output:hdmi-surround, output:hdmi-surround+input:analog-stereo, output:hdmi-surround71, output:hdmi-surround71+input:analog-stereo[
aby automatycznie przełączyć dźwięk na TV potrzebujemy dwóch informacji:
Nazwy karty dźwiękowej w systemie (po kropce!):
Cytat:Nazwa: alsa_card.pci-0000_00_1b.0
oraz nazw profili, pomiędzy którymi skrypt będzie przełączał dźwięk:
Cytat:Profile:
    output:analog-stereo: Wyjście Analogowe stereo (odpływy: 1, źródła: 0, priorytet: 6000, dostępne: tak)
    output:hdmi-stereo: Wyjście Digital Stereo (HDMI) (odpływy: 1, źródła: 0, priorytet: 5400, dostępne: tak)

Sprawdzamy, jaki numer ma ostatnia reguła w lokalizacji /lib/udev/rules.d/

 [Obrazek: Eg6nCnQl.png]

Jak widzimy ostatnia reguła ma nr 99.
Tworzymy kolejną czyli w tym przypadku 100 ale w lokalizacji /etc/udev/rules.d o nazwie 100-hdmi_sound.rules.

Tworzymy plik ww.:
Kod:
sudo touch /etc/udev/rules.d/100-hdmi_sound.rules

Otwieramy go do edycji:
Kod:
xed admin:///etc/udev/rules.d/100-hdmi_sound.rules

Gdzie xed, to nazwa edytora tekstu jaki zainstalowany mamy w systemie. Można użyć także innego graficznego jak: mousepad, pluma, gedit czy innego edytora tekstu, w zależności od tego, jaki dostępny jest w systemie.

Otworzy nam się puste okno edytora, w które wklejamy następujący kod:
Kod:
ACTION=="change", SUBSYSTEM=="drm", RUN+="/usr/bin/hdmi_sound_toggle.sh"
Zapisujemy zmiany i zamykamy okno edytora.

Teraz tworzymy skrypt, który będzie przełączał dźwięk.

Tworzymy plik:
Kod:
sudo touch /usr/bin/hdmi_sound_toggle.sh

Otwieramy go do edycji:
Kod:
xed admin:///usr/bin/hdmi_sound_toggle.sh

Znów otworzy się puste okno edytora, w które wklejamy przygotowany specjalnie dla naszego sprzętu kod skryptu (to tu jest potrzebny wynik komendy z początku tego poradnika).
Linijki kodu, które należy zmodyfikować, opisane są zakomentowanym tekstem (#), aby był ignorowany podczas wykonywania kodu.
Kod:
#!/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_1b.0" # Tu wstawiamy nazwę karty dźwiękowej - zgodnie z danymi z pierwszej komendy.
HDMI_PROFILE="hdmi-stereo"     # Tu wstawiamy nazwę profilu HDMI, na który dźwięk będzie przełączany po podpięciu wtyczki HDMI.

INTERNAL_CARD="pci-0000_00_1b.0" # Tu wstawiamy jeszcze raz nazwę karty dźwiękowej - zgodnie z danymi z pierwszej komendy.
INTERNAL_PROFILE="analog-stereo"  # Tu wstawiamy nazwę profilu domyślnego (głośniki), który będzie używany gdy wtyczka HDMI nie będzie podpięta.

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

Zapisujemy i zamykamy okno edytora.

Następnie nadajemy temu plikowi prawa wykonania (w końcu to skrypt - ma się _wykonać_ Wink)


Kod:
sudo chmod +x /usr/bin/hdmi_sound_toggle.sh

Musimy jeszcze odświeżyć listę reguł poleceniem:

Kod:
sudo udevadm control --reload-rules

i zrestartować komputer, np. sudo reboot

Po ponownym uruchomieniu komputera powinno działać mniej więcej tak: http://venco.com.pl/~yahoob3/priv/tajne/HDMI.mp4

Przepis i treść jednego ze skryptów zaczerpnąłem ze strony: http://askubuntu.com/questions/458194/sw...ptop-14-04
Posiłkowałem się jednak jeszcze takimi materiałami:
UDEV, czyli jak pisać reguły dla urządzeń,
https://pl.wikipedia.org/wiki/Filesystem...y_Standard
https://pl.wikibooks.org/wiki/Linux/Syst...log%C3%B3w
- https://forum.linuxmint.pl/showthread.php?tid=36 Smile dzięki @magnus


Skocz do:




Użytkownicy przeglądający ten wątek: 2 gości