Autor Wątek: Auto przełączenie dźwięku na HDMI po włożeniu wtyczki - skrypt  (Przeczytany 1685 razy)

Offline yahoob3

  • Grupa Trzymająca Władzę
  • Wielki miętus
  • *****
  • Wiadomości: 857
  • Punkty: 190
  • Płeć: Mężczyzna
  • Zgryźliwy tetryk
    • Organy Hammonda
Auto przełączenie dźwięku na HDMI po włożeniu wtyczki - skrypt
« dnia: Sierpień 17, 2016, 21:14:36 pm »
Mam taki problem: usiłuję uruchomić skrypt przełączający dźwięk automatycznie na HDMI, kiedy wtyczka zostanie podłączona do gniazda (wg tego poradnika: http://askubuntu.com/questions/458194/switching-to-hdmi-audio-when-hdmi-is-plugged-into-a-laptop-14-04)
pactl list cards daje u mnie wynik:
Karta #0
Nazwa: alsa_card.pci-0000_00_1b.0
Sterownik: module-alsa-card.c
Właściciel modułu: 4
Właściwości:
alsa.card = "0"
alsa.card_name = "HDA Intel PCH"
alsa.long_card_name = "HDA Intel PCH at 0xd0610000 irq 28"
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 (sinks: 0, sources: 1, priority. 60)
output:analog-stereo: Wyjście Analogowe stereo (sinks: 1, sources: 0, priority. 6000)
output:analog-stereo+input:analog-stereo: Analogowy dupleks stereo (sinks: 1, sources: 1, priority. 6060)
output:hdmi-stereo: Wyjście Digital Stereo (HDMI) (sinks: 1, sources: 0, priority. 5400)
output:hdmi-stereo+input:analog-stereo: Wyjście Digital Stereo (HDMI) + Wejście Analogowe stereo (sinks: 1, sources: 1, priority. 5460)
output:hdmi-surround: Wyjście Digital Surround 5.1 (HDMI) (sinks: 1, sources: 0, priority. 300)
output:hdmi-surround+input:analog-stereo: Wyjście Digital Surround 5.1 (HDMI) + Wejście Analogowe stereo (sinks: 1, sources: 1, priority. 360)
off: Wyłączone (sinks: 0, sources: 0, priority. 0)
Aktywny profil: output:analog-stereo+input:analog-stereo
Porty:
analog-input-microphone-internal: Wewnętrzny mikrofon (priority: 8900, 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
analog-input-microphone: Mikrofon (priority: 8700, latency offset: 0 usec, 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
analog-output-speaker: Głośniki (priority: 10000, latency offset: 0 usec, not available)
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, 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

Dodałem regułę w /etc/udev/rules.d/98-hdmi_sound.rules o treści SUBSYSTEM=="drm", ACTION=="change", RUN+="/lib/udev/hdmi_sound_toggle.sh"
Skrypt wygląda następująco:
#!/bin/bash
## From: https://askubuntu.com/questions/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
Kiedy uruchamiam skrypt w terminalu wywala taki błąd:
jw@MINT ~ $ sudo /lib/udev/hdmi_sound_toggle.sh
/lib/udev/hdmi_sound_toggle.sh: linia 16: błąd składni przy nieoczekiwanym znaczniku `;'
/lib/udev/hdmi_sound_toggle.sh: linia 16: `    for i in ${INPUTS[*]}; do pactl move-sink-input $i alsa_output.pci-0000_00_1b.0.hdmi-stereo &> /dev/null; done'
/lib/udev/hdmi_sound_toggle.sh: linia 17: błąd składni przy nieoczekiwanym znaczniku `else'
/lib/udev/hdmi_sound_toggle.sh: linia 17: `else'

Czy ktoś może mi tak trochę łopatologicznie wyjaśnić o co chodzi i jak tego .sh'a uruchomić?


Mint 18.3 Cinnamon, kern. 4.10; 64-bit na: Lenovo G500S z CPU Pent. 2020M 2.4 GHz*2; 6 GB RAM; GPU Intel+GeForce 720M;
LU#586742

Offline yahoob3

  • Grupa Trzymająca Władzę
  • Wielki miętus
  • *****
  • Wiadomości: 857
  • Punkty: 190
  • Płeć: Mężczyzna
  • Zgryźliwy tetryk
    • Organy Hammonda
Odp: Auto przełączenie dźwięku na HDMI po włożeniu wtyczki - skrypt
« Odpowiedź #1 dnia: Wrzesień 01, 2018, 21:38:43 pm »
Dobry!
Pozwolicie, że przypomnę mój post sprzed dwóch lat.
Może tym razem ktoś obeznany z kodem pomoże uruchomić skrypt, który wali ww. błędami.
Gdyby mi się udało zrobię z tego [HT], bo to w sumie przydatna funkcja, której czasem mi w Mincie brakuje.
Mint 18.3 Cinnamon, kern. 4.10; 64-bit na: Lenovo G500S z CPU Pent. 2020M 2.4 GHz*2; 6 GB RAM; GPU Intel+GeForce 720M;
LU#586742

Offline dedito

  • Urząd Porządkowy
  • Miętowy krzew
  • *******
  • Wiadomości: 325
  • Punkty: 164
Odp: Auto przełączenie dźwięku na HDMI po włożeniu wtyczki - skrypt
« Odpowiedź #2 dnia: Wrzesień 02, 2018, 09:59:43 am »
Spróbuj tak:
for i in "${INPUTS[*]}"; do pactl move-sink-input $i alsa_output.pci-0000_00_1b.0.hdmi-stereo &> /dev/null; done

Offline yahoob3

  • Grupa Trzymająca Władzę
  • Wielki miętus
  • *****
  • Wiadomości: 857
  • Punkty: 190
  • Płeć: Mężczyzna
  • Zgryźliwy tetryk
    • Organy Hammonda
Odp: Auto przełączenie dźwięku na HDMI po włożeniu wtyczki - skrypt
« Odpowiedź #3 dnia: Wrzesień 02, 2018, 16:58:46 pm »
Niestety, waliło tym samym błędem.
Spróbowałem tej drugiej wersji skryptu i...
w@MINT ~ $ sudo /lib/udev/hdmi_sound_toggle.sh
Home directory not accessible: Brak dostępu
Usługa PulseAudio nie jest uruchomiona, lub nie jest uruchomiona jako usługa sesji.
Pomino, że jw@MINT ~ $ pulseaudio
E: [pulseaudio] pid.c: Daemon already running.
E: [pulseaudio] main.c: pa_pid_file_create() się nie powiodło.
OK, poszperam pod tym kątem...

EDIT:
OK, teraz jak podłącze wtyczkę, z automatu się nie przełącza, ale!
jw@MINT ~ $ sudo /lib/udev/hdmi_sound_toggle.sh
[sudo] hasło użytkownika jw:
Home directory not accessible: Brak dostępu
Usługa PulseAudio nie jest uruchomiona, lub nie jest uruchomiona jako usługa sesji.

Pomimo to dźwięk przeskakuje na HDMI, i ;D przez chwilę brzmiał jak z gramofonu ze złachaną wkładką i porysowaną płytą na talerzu :)
Po jakichś 10 s, brzmi już OK :)
« Ostatnia zmiana: Wrzesień 02, 2018, 17:09:50 pm wysłana przez yahoob3 »
Mint 18.3 Cinnamon, kern. 4.10; 64-bit na: Lenovo G500S z CPU Pent. 2020M 2.4 GHz*2; 6 GB RAM; GPU Intel+GeForce 720M;
LU#586742

Offline dedito

  • Urząd Porządkowy
  • Miętowy krzew
  • *******
  • Wiadomości: 325
  • Punkty: 164
Odp: Auto przełączenie dźwięku na HDMI po włożeniu wtyczki - skrypt
« Odpowiedź #4 dnia: Wrzesień 03, 2018, 08:06:25 am »
Druga wersja skryptu?
Ja tu widzę tylko jedną.

Offline yahoob3

  • Grupa Trzymająca Władzę
  • Wielki miętus
  • *****
  • Wiadomości: 857
  • Punkty: 190
  • Płeć: Mężczyzna
  • Zgryźliwy tetryk
    • Organy Hammonda
Odp: Auto przełączenie dźwięku na HDMI po włożeniu wtyczki - skrypt
« Odpowiedź #5 dnia: Wrzesień 03, 2018, 10:04:06 am »
Jest na askubuntu, w tym linku z pierwszego posta. Odezwę się wieczorem.
Mam tylko dylemat: czy regułę wrzucić do /lib/udev/ czy do /etc/udev. Z tego co czytałem to, co w /etc/udev m.in. nadpisuje /lib/udev/ o tym samym numerze. Poza tym składnia reguły mi się nie podoba ;) jest inna od pozostałych - powinna zacząć się od "ACTION". Ma to znaczenie?
« Ostatnia zmiana: Wrzesień 03, 2018, 18:57:51 pm wysłana przez yahoob3 »
Mint 18.3 Cinnamon, kern. 4.10; 64-bit na: Lenovo G500S z CPU Pent. 2020M 2.4 GHz*2; 6 GB RAM; GPU Intel+GeForce 720M;
LU#586742

Offline yahoob3

  • Grupa Trzymająca Władzę
  • Wielki miętus
  • *****
  • Wiadomości: 857
  • Punkty: 190
  • Płeć: Mężczyzna
  • Zgryźliwy tetryk
    • Organy Hammonda
Odp: Auto przełączenie dźwięku na HDMI po włożeniu wtyczki - skrypt
« Odpowiedź #6 dnia: Wrzesień 03, 2018, 18:58:30 pm »
Sorry za posta pod postem, ALLEEE!

OK, działa. Przepis jest taki (zadziałał u mnie na 18.3 Cinnamon - sprzęt w podpisie):
Sprawdzamy kartę dźwiękową:
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


Potrzebujemy do przełączenia dźwięku stereo na TV:
Cytuj
Nazwa: alsa_card.pci-0000_00_1b.0
oraz
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)


Tworzymy regułę przy użyciu edytora XED (numer można sprawdzić, żeby nie nadpisać innej już istniejącej w lokalizacji: /lib/udev/rules.d/. U mnie ostatnia miała nr 99).
gksu xed /lib/udev/rules.d/100-hdmi_sound.rulesOtworzy się pusty plik, do którego wklejamy to:
ACTION=="change", SUBSYSTEM=="drm", RUN+="/lib/udev/hdmi_sound_toggle.sh"Zapisujemy i zamykamy plik. Następnie odświeżamy listę reguł:
sudo udevadm control --reload-rulesTeraz tworzymy skrypt, który będzie przełączał dźwięk:
gksu xed /lib/udev/hdmi_sound_toggle.sho zawartości:
#!/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"
HDMI_PROFILE="hdmi-stereo"

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
zapisujemy, zamykamy i nadajemy my prawa wykonania:
sudo chmod +x /lib/udev/hdmi_sound_toggle.shRestartujemy komputer.
U mnie zadziałało po 2 lub 3 krotnym włożeniu wtyczki HDMI do gniazda (u mnie tak jest... może gniazdo zjechane?)

Dla niedowiarków http://venco.com.pl/~yahoob3/priv/tajne/hdmi.mp4

Czy ktoś mógłby zweryfikować, że to działa nie tylko u mnie?
Przepis i skrypt(y - bo próbowałem 3-ech) zaczerpnąłem z tej strony:
http://askubuntu.com/questions/458194/switching-to-hdmi-audio-when-hdmi-is-plugged-into-a-laptop-14-04
« Ostatnia zmiana: Wrzesień 03, 2018, 21:00:32 pm wysłana przez yahoob3 »
Mint 18.3 Cinnamon, kern. 4.10; 64-bit na: Lenovo G500S z CPU Pent. 2020M 2.4 GHz*2; 6 GB RAM; GPU Intel+GeForce 720M;
LU#586742

Offline dedito

  • Urząd Porządkowy
  • Miętowy krzew
  • *******
  • Wiadomości: 325
  • Punkty: 164
Odp: Auto przełączenie dźwięku na HDMI po włożeniu wtyczki - skrypt
« Odpowiedź #7 dnia: Wrzesień 04, 2018, 07:54:30 am »
Podaj dokładnie z jakim skryptem Ci to obecnie działa.
Ten xed to chyba zwykły edytor tekstowy, więc może być dowolny inny?
« Ostatnia zmiana: Wrzesień 04, 2018, 07:58:35 am wysłana przez dedito »

Offline ciastek1981

  • Globator Moderalny
  • Spamerzy
  • *******
  • Wiadomości: 1289
  • Punkty: 153
  • Płeć: Mężczyzna
Odp: Auto przełączenie dźwięku na HDMI po włożeniu wtyczki - skrypt
« Odpowiedź #8 dnia: Wrzesień 04, 2018, 08:41:30 am »
@dedito

xed (miał być xedit, ale ...   ;D) - to zunifikowany notatnik w Mincie, zastępuje Gedit, Pluma, Mousepad  :)

Offline yahoob3

  • Grupa Trzymająca Władzę
  • Wielki miętus
  • *****
  • Wiadomości: 857
  • Punkty: 190
  • Płeć: Mężczyzna
  • Zgryźliwy tetryk
    • Organy Hammonda
Odp: Auto przełączenie dźwięku na HDMI po włożeniu wtyczki - skrypt
« Odpowiedź #9 dnia: Wrzesień 04, 2018, 10:14:12 am »
@dedito, @ciastek
Oczywiście może być każdy inny edytor, pisałem to pod zielonych. :)
Skrypt to ten, którego treść jest w tym poście.W sumie jest najlepszy ze wszystkich, bo daje łatwą możliwość przełączenia nawet różnych, fizycznych kart dźwiękowych. IMO fajnie napisany (poza tym, że u mnie działa ;)), podajesz sprzęt i profile, a potem się już "samo"dzieje. :)
Mint 18.3 Cinnamon, kern. 4.10; 64-bit na: Lenovo G500S z CPU Pent. 2020M 2.4 GHz*2; 6 GB RAM; GPU Intel+GeForce 720M;
LU#586742

Offline dedito

  • Urząd Porządkowy
  • Miętowy krzew
  • *******
  • Wiadomości: 325
  • Punkty: 164
Odp: Auto przełączenie dźwięku na HDMI po włożeniu wtyczki - skrypt
« Odpowiedź #10 dnia: Wrzesień 04, 2018, 13:12:49 pm »
Z oficjalnego ArchWiki.
Tak na oko, powinno też działać na Mincie.
Jest też odwołanie do dyskusji https://wiki.archlinux.org/index.php/Talk:PulseAudio/Examples#Can.27t_udev_rule_directly_run_a_script.3F
Wynika z tego, że nie można z poziomu udev wywoływać skryptów, aby to obejść należy sobie dodać usługę.
Cytuj
udev rule can't directly run a script, a workaround is to use a .service to run this script
Cytuj
Automatically switch audio to HDMI
Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: Can't udev rule directly run a script? (Discuss in Talk:PulseAudio/Examples#Can't udev rule directly run a script?)
Create a script to switch to the desired audio profile if an HDMI cable is plugged in:

/usr/local/bin/hdmi_sound_toggle.sh
#!/bin/bash

USER_NAME=$(who | awk -v vt=tty$(fgconsole) '$0 ~ vt {print $1}')
USER_ID=$(id -u "$USER_NAME")
CARD_PATH="/sys/class/drm/card0/"
AUDIO_OUTPUT="analog-surround-40"
PULSE_SERVER="unix:/run/user/"$USER_ID"/pulse/native"

for OUTPUT in $(cd "$CARD_PATH" && echo card*); do
  OUT_STATUS=$(<"$CARD_PATH"/"$OUTPUT"/status)
  if [[ $OUT_STATUS == connected ]]
  then
    echo $OUTPUT connected
    case "$OUTPUT" in
      "card0-HDMI-A-1")
        AUDIO_OUTPUT="hdmi-stereo" # Digital Stereo (HDMI 1)
     ;;
      "card0-HDMI-A-2")
        AUDIO_OUTPUT="hdmi-stereo-extra1" # Digital Stereo (HDMI 2)
     ;;
    esac
  fi
done
echo selecting output $AUDIO_OUTPUT
sudo -u "$USER_NAME" pactl --server "$PULSE_SERVER" set-card-profile 0 output:$AUDIO_OUTPUT+input:analog-stereo
Make the script executable:

chmod +x /usr/local/bin/hdmi_sound_toggle.sh
Create a udev rule to run this script when the status of the HDMI change:

Note: udev rule can't directly run a script, a workaround is to use a .service to run this script
/etc/udev/rules.d/99-hdmi_sound.rules
KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/bin/systemctl start hdmi_sound_toggle.service"
Finally, create the .service file required by the udev rule above:

/etc/systemd/system/hdmi_sound_toggle.service
[Unit]
Description=hdmi sound hotplug

[Service]
Type=simple
RemainAfterExit=no
ExecStart=/usr/local/bin/hdmi_sound_toggle.sh

[Install]
WantedBy=multi-user.target
To make the change effective don't forget to reload the udev rules:

udevadm control --reload-rules
You'll also need to reload the systemd units.

systemctl daemon-reload
A reboot might be required.
« Ostatnia zmiana: Wrzesień 04, 2018, 14:06:50 pm wysłana przez dedito »

Offline yahoob3

  • Grupa Trzymająca Władzę
  • Wielki miętus
  • *****
  • Wiadomości: 857
  • Punkty: 190
  • Płeć: Mężczyzna
  • Zgryźliwy tetryk
    • Organy Hammonda
Odp: Auto przełączenie dźwięku na HDMI po włożeniu wtyczki - skrypt
« Odpowiedź #11 dnia: Wrzesień 04, 2018, 14:13:52 pm »
Na budowie skryptów i systemu znam się jak świnia na gwiazdach, może dlatego u mnie zadziałało ;)
Ale... sprawa o której pisałem wcześniej, bo miałem wątpliwości... regułę dać do "/lib/udev/rules.d/", czy do "/etc/udev/rules.d/". Na ArchWiki piszą o /etc/, może tu jest problem.
Kiedy wcześniej reguła była u mnie w /etc/ skrypt nie uruchamiał się - można go było odpalić tylko "ręcznie", ale może też zapomniałem odświeżyć listę reguł?
W sumie, kilka permutacji przewinęło się przez mój komputer. Jedna zadziałała, dalej za bardzo drążyć nie będę :) Z tego, co pisano na askubuntu, trochę randomowo przyznam, wybrałem poszczególne części i posklejałem je na tyle sensownie, na ile rozumiem kod, czy ścieżki. Na spokojne sprawdzę, czy inne profile nie będą lepsze. Zwłaszcza te ze "-stereo+input".
Mint 18.3 Cinnamon, kern. 4.10; 64-bit na: Lenovo G500S z CPU Pent. 2020M 2.4 GHz*2; 6 GB RAM; GPU Intel+GeForce 720M;
LU#586742

Offline dedito

  • Urząd Porządkowy
  • Miętowy krzew
  • *******
  • Wiadomości: 325
  • Punkty: 164
Odp: Auto przełączenie dźwięku na HDMI po włożeniu wtyczki - skrypt
« Odpowiedź #12 dnia: Wrzesień 04, 2018, 14:35:50 pm »
Główny problem to raczej to, że wywołujesz skrypt z poziomu udev.
Wszelkie poradniki jakie znam mówią o katalogu etc.
Przykłąd: https://morfikov.github.io/post/udev-czyli-jak-pisac-reguly-dla-urzadzen/

« Ostatnia zmiana: Wrzesień 04, 2018, 15:24:36 pm wysłana przez dedito »

Offline ciastek1981

  • Globator Moderalny
  • Spamerzy
  • *******
  • Wiadomości: 1289
  • Punkty: 153
  • Płeć: Mężczyzna
Odp: Auto przełączenie dźwięku na HDMI po włożeniu wtyczki - skrypt
« Odpowiedź #13 dnia: Wrzesień 04, 2018, 20:14:47 pm »
@yb3

Wracamy do korzeni

Cytuj
/etc -pliki konfiguracyjne oraz ustawienia systemowe

/lib -systemowe biblioteki współdzielone (shared libraries), zawierające funkcje które są wykonywane przez wiele różnych programów

/usr/share/ -Dane niezależne od architektury, a więc między nimi współdzielone (ang. shared).

https://pl.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

http://linuxwiki.pl/wiki/Katalog_g%C5%82%C3%B3wny

https://pl.wikibooks.org/wiki/Linux/System_plik%C3%B3w/Drzewo_katalog%C3%B3w

No chyba, że znasz "mormoński"  ;D http://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.pdf
« Ostatnia zmiana: Wrzesień 04, 2018, 20:17:43 pm wysłana przez ciastek1981 »

Offline yahoob3

  • Grupa Trzymająca Władzę
  • Wielki miętus
  • *****
  • Wiadomości: 857
  • Punkty: 190
  • Płeć: Mężczyzna
  • Zgryźliwy tetryk
    • Organy Hammonda
Odp: Auto przełączenie dźwięku na HDMI po włożeniu wtyczki - skrypt
« Odpowiedź #14 dnia: Wrzesień 04, 2018, 20:52:53 pm »
 :) Rozumiem chłopaki do czego zmierzacie. Właśnie czytam, m.in. na DebianWiki, to co Morfik napisał na DUGu i na gitcie (linkował dedito - to w zasadzie ten sam tekst), ale nie bardzo znajduję jasną odpowiedź, dlaczego to co skleciłem działać tak nie powinno, a działa :)
OK, rozumiem, że łap do sieczkarni (/lib/udev/) pchać się nie powinno. Że lib jest systemowe (czyt. nie rusz), etc, jest od tego żeby coś można było bezpiecznie grzebnąć. Dobrze kumam? Z pobieżnie złapanej wiedzy wynika, że udev leci po kolei po regułach i jak coś mu podpasuje, zmienia i leci dalej, reguł do jednego urządzenia może być (jeśli dobrze zrozumiałem) wiele. Czy liczba reguł jest ograniczona do 99? Chyba nie, bo setna zadziałała.
Mam zerową wiedzę na temat systemu i jego działania - tego jestem świadomy :) nie musicie mi tego wypominać ;D
Tylko, że uruchomienie przełącznika wg tego, co likujecie wymaga drogi "naokoło" i jeszcze przez service. Robi się to strasznie skomplikowane, przynajmniej dla takiego gnoma jak ja :)
Jako że jesteśmy na forum Minta :) możecie mi to wytłumaczyć jak czterolatkowi?

EDIT:
Jeszcze jedno. U mnie w /etc/udev/rules.d/ nie ma nic - pusty katalog. W /lib/udev/rules.d - jest 106 reguł, w tym ta jedna moja.
Ponadto piętro wyżej w /lib/udev roi się od skryptów, choć nie mają .sh na końcu. Może Mint jest tak zbudowany, że wywołanie skryptu z poziomu udev nie wywołuje marskości wątroby? ;)
« Ostatnia zmiana: Wrzesień 04, 2018, 21:06:45 pm wysłana przez yahoob3 »
Mint 18.3 Cinnamon, kern. 4.10; 64-bit na: Lenovo G500S z CPU Pent. 2020M 2.4 GHz*2; 6 GB RAM; GPU Intel+GeForce 720M;
LU#586742