Хочу чтобы при подключении к ноуту телевизора через hdmi, вывод звука(и изображения, но с этим всё нормально) переключался на телик.
Что я сделал:
1) cat /etc/udev/rules.d/hdmi.rules:
SUBSYSTEM=="drm", RUN+="/usr/local/bin/hdmi_toggle.sh"
2) cat /usr/local/bin/hdmi_toggle.sh:
#!/bin/sh
sleep 4
#USER_NAME=`who | grep "(:0)" | cut -f 1zx -d ' '| sort -u`
#USER_NAME=`who | cut -f 1 -d ' '`
USER_NAME='username'
USER_ID=$(id -u "$USER_NAME")
HDMI_STATUS=$(cat /sys/class/drm/card0/*HDMI*/status)
SIGNAL_DIR='/tmp/_out_to_hdmi'
export PULSE_RUNTIME_PATH='/run/user/'"$USER_ID"'/pulse'
PULSE_SERVER="unix:${PULSE_RUNTIME_PATH}/native"
export DISPLAY=':0'
if [ xconnected = x"$HDMI_STATUS" ]; then
echo "hdmi_connected" >> /tmp/_out_to_hdmi.log
if [ ! -d "$SIGNAL_DIR" ]; then
echo "signal_dir does not exists" >> /tmp/_out_to_hdmi.log
mkdir "$SIGNAL_DIR"
sudo -u "$USER_NAME" xrandr --output HDMI1 --mode 1920x1080 --output LVDS1 --off
sudo -u "$USER_NAME" xset s off -dpms
sudo -u "$USER_NAME" xrdb -merge /home/"$USER_NAME"/.Xresources_tv
# if [ ! -e "${PULSE_SERVER#*:}" ]; then
# # sudo -u "$USER_NAME" pulseaudio -k
# sudo -u "$USER_NAME" sh -c 'pulseaudio --start --log-target=syslog'
# fi
if [ -e "${PULSE_SERVER#*:}" ]; then
sudo -u "$USER_NAME" pactl --server "$PULSE_SERVER" set-card-profile 0 output:hdmi-stereo+input:analog-stereo
else
sudo -u "$USER_NAME" pactl set-card-profile 0 output:hdmi-stereo+input:analog-stereo
fi
fi
else
echo "hdmi_disconnected" >> /tmp/_out_to_hdmi.log
if [ -d "$SIGNAL_DIR" ]; then
echo "signal_dir does exists" >> /tmp/_out_to_hdmi.log
rm -rf "$SIGNAL_DIR"
sudo -u "$USER_NAME" xrandr --output LVDS1 --mode 1366x768 --output HDMI1 --off
sudo -u "$USER_NAME" xset s on +dpms
sudo -u "$USER_NAME" xrdb -merge /home/"$USER_NAME"/.Xresources
if [ -e "${PULSE_SERVER#*:}" ]; then
sudo -u "$USER_NAME" pactl --server "$PULSE_SERVER" set-card-profile 0 output:analog-stereo+input:analog-stereo
else
sudo -u "$USER_NAME" pactl set-card-profile 0 output:analog-stereo+input:analog-stereo
fi
fi
fi
Это работает, если пульсеаудио уже запущен, а вот если он не запущен, то скрипт зависает.
Сначало было это:
SELinux is preventing /usr/libexec/rtkit-daemon from using the setsched access on a process. For complete SE
мар 10 20:19:50 localhost.localdomain python[1586]: SELinux is preventing /usr/libexec/rtkit-daemon from using the setsched access on a process.
***** Plugin catchall (100. confidence) suggests **************************
If you believe that rtkit-daemon should be allowed setsched access on processes labeled udev_t by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep rtkit-daemon /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp
Эта строчка помогла:
grep rtkit-daemon /var/log/audit/audit.log | audit2allow -M mypol
semodule -i mypol.pp
Теперь же в момент вызова
pactl set-card-profile
появляются 3 процесса pulseaudio и скрипт зависает пока их не грохнешь, звука нет при этом. Тоже самое если запустить из скрипта пульсу так: sudo -u "$USER_NAME" pulseaudio --start #или -D