pacmd - regra do udev para mover entradas para diferentes sumidouros durante a reprodução

1

novato aqui.

Eu quero poder mudar para a saída de áudio HDMI conectando o cabo HDMI durante a reprodução. Eu segui o conselho dado aqui: Como alterar o dissipador pulseaudio com "pacmd set-default-sink" durante a reprodução?

Eu o integrei em uma regra do udev, mas ainda não move o fluxo de entrada automaticamente. Se eu executar a mesma regra / script do terminal, isso funciona. Você pode encontrar o script abaixo.

Nota: Eu corro "sudo udevadm control --reload-rules" toda vez que eu mudo o script.

Eu também não consegui recuperar nomes de saída de vídeo HDMI e números de coletores de áudio de pactl ou xrandr, então eu os escrevi manualmente, eu deveria fazer algumas leituras em scripts bash. Eu ficaria feliz se alguém ajuda com isso também. Desculpe se eu usei a terminologia errada. E obrigado antecipadamente.

#!/bin/bash
# Sound Toggle
# By Charles Cruz

########### Settings ###########
# Backlight Settings
BACKLIGHT_BATTERY=20
BACKLIGHT_AC=100

USERID="$(cat /var/run/ConsoleKit/database | grep -B 6 is_active=true | grep uid= | cut -f 2 -d '=')"
USER="$(grep $USERID /etc/passwd | cut -f 1 -d ':')"
HDMI_STATUS="$(cat /sys/class/drm/card0-HDMI-A-1/status)"
GNOME_SCREENSAVER_PROC='ps xa | grep gnome-screensaver | head -n 1 | awk '{print $1}''

INT="eDP1"
EXT="HDMI1"

export 'grep -z DBUS_SESSION_BUS_ADDRESS /proc/$GNOME_SCREENSAVER_PROC/environ'
export XAUTHORITY="/home/$USER/.Xauthority"
export DISPLAY="$(cat /var/run/ConsoleKit/database | grep x11_display= | cut -f 2 -d '=')"

# HDMI is connected
if [ "$HDMI_STATUS" = connected ]; then

# Set output to HDMI
sudo -u $USER xrandr --output $EXT --auto
sudo -u $USER xrandr --output $INT --off

# Set the sound card profile
 sudo -u $USER pactl set-default-sink 0

# Move inputs to HDMI

inputs=$(pacmd list-sink-inputs | awk '$1 == "index:" {print $2}')
for INPUT in $inputs; do # Move all current inputs to the new default sound card
 pacmd move-sink-input $INPUT 0
done

# Disable the lockscreen if it's enabled so you can close the lockscreen
if [[ $(sudo -u $USER gsettings get org.gnome.desktop.screensaver lock-enabled) = true ]]; then
sudo -u $USER gsettings set org.gnome.desktop.screensaver lock-enabled false
fi

# HDMI is not connected
else

# Set output to INTERNAL
sudo -u $USER xrandr --output $INT --auto
sudo -u $USER xrandr --output $EXT --off 

# Set the sound card profile
 sudo -u $USER pactl set-default-sink-1

# Move inputs to internal

inputs=$(pacmd list-sink-inputs | awk '$1 == "index:" {print $2}')
for INPUT in $inputs; do # Move all current inputs to the new default sound card
  pacmd move-sink-input $INPUT 1
done

# Restore the lock setting, if necessary
if [[ $(sudo -u $USER gsettings get org.gnome.desktop.screensaver lock-enabled) = false ]]; then
sudo -u $USER gsettings set org.gnome.desktop.screensaver lock-enabled true
fi

# Restore default battery/power brightness
cat /proc/acpi/ac_adapter/AC/state | grep "on-line"
if [ $? -eq 0 ]; then
xbacklight -set $BACKLIGHT_AC # Power cable is connected
else
xbacklight -set $BACKLIGHT_BATTERY # Power cable is not connected
fi
fi

exit 0

E aqui está a regra do udev. O caminho é /etc/udev/rules.d/hdmi.rules O caminho para o script anterior era / usr / bin / toggle-sound

SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/bin/toggle-sound"
    
por ssulun 02.04.2016 / 10:43

0 respostas