Je suis utilisateur d'Archlinux depuis six mois et j'en suis vraiment très satisfait.
C'est cependant la première fois que je suis amené à demander de l'aide, car là, je cale vraiment, en dépit de nombreuses recherches sur le Net où je me rends bien compte que mon cas n'est pourtant pas isolé. J'ai eu beau appliquer les solutions que j'ai pu trouver, rien n'y fait.
Mon problème : je souhaiterais, lorsque je branche ma TV à mon PC portable via un cable HDMI, un switch automatique, à la fois de l'affichage (sortie uniquement vers l'écran TV) et du son (hauts-parleurs TV), au lieu de le faire manuellement via fn+f8 et le réglage des options sonores de Gnome.
J'ai donc créé une règle udev pour HDMI renvoyant à un script sh.
Je vous les soumets.
Script
hdmi.sh
créé dans /usr/local/bin/
, puis modifié pour l'exécution avec chmod +x :
Code : Tout sélectionner
#! /bin/bash
printenv
export PULSE_RUNTIME_PATH="/run/user/1000/pulse/"
export DISPLAY=:0
read hdmi_status < /sys/class/drm/card0-HDMI-A-1/status
echo $hdmi_status
sleep 1
if [[ $hdmi_status == "connected" ]]; then
pacmd set-card-profile 0 "output:hdmi-stereo"
xrandr --output eDP1 --off --output HDMI1 --auto
else
pacmd set-card-profile 0 "output:analog-stereo"
xrandr --output eDP1 --auto
fi
Reste donc à l'appeler par une règle udev. Et c'est là que ça coince.
Règle udev :
/etc/udev/rules.d/90-hdmi.rules
Code : Tout sélectionner
KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/hdmi.sh"
Pourtant le périphérique est bien détecté puisque
udevadm monitor
me renvoie lorsque je débranche le cable :
Code : Tout sélectionner
[jeff@zenarch ~]$ udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent
KERNEL[1751.647415] change /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
UDEV [1751.650155] change /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
sudo udevadm control --reload-rules
.J'ai modifié par la suite, au vu de ce que je pouvais voir sur le Net, à la fois le script (essai initial avec pactl au lieu de pacmd) et la règle udev. Je pense que le problème vient de cette dernière.
Je l'ai notamment modifiée ainsi pensant que le problème pouvait venir de l'exécution :
Code : Tout sélectionner
KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", RUN+="su jeff -c /usr/local/bin/hdmi.sh"
Code : Tout sélectionner
KERNEL=="card0", SUBSYSTEM=="drm", DEVPATH=="/devices/pci0000:00/0000:00:02.0/drm/card0", ACTION=="change", RUN+="/usr/local/bin/hdmi.sh"
Voici enfin ce que donne
sudo udevadm test /devices/pci0000:00/0000:00:02.0/drm/card0
(périphérique branché) :
Code : Tout sélectionner
calling: test
version 218
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.
=== trie on-disk ===
tool version: 218
file size: 6746317 bytes
header size 80 bytes
strings 1710365 bytes
nodes 5035872 bytes
Load module index
timestamp of '/etc/systemd/network' changed
timestamp of '/usr/lib/systemd/network' changed
Parsed configuration file /usr/lib/systemd/network/99-default.link
Created link configuration context.
timestamp of '/etc/udev/rules.d' changed
Reading rules file: /usr/lib/udev/rules.d/10-dm.rules
Reading rules file: /etc/udev/rules.d/10-local.rules
invalid ACTION operation
invalid rule '/etc/udev/rules.d/10-local.rules:2'
Reading rules file: /usr/lib/udev/rules.d/11-dm-lvm.rules
Reading rules file: /usr/lib/udev/rules.d/13-dm-disk.rules
Reading rules file: /usr/lib/udev/rules.d/39-usbmuxd.rules
Reading rules file: /usr/lib/udev/rules.d/40-gphoto.rules
Reading rules file: /usr/lib/udev/rules.d/40-hpet-permissions.rules
Reading rules file: /usr/lib/udev/rules.d/40-usb-media-players.rules
Reading rules file: /usr/lib/udev/rules.d/42-usb-hid-pm.rules
Reading rules file: /usr/lib/udev/rules.d/49-sane.rules
Reading rules file: /usr/lib/udev/rules.d/50-udev-default.rules
Reading rules file: /usr/lib/udev/rules.d/60-cdrom_id.rules
Reading rules file: /usr/lib/udev/rules.d/60-drm.rules
Reading rules file: /usr/lib/udev/rules.d/60-keyboard.rules
Reading rules file: /usr/lib/udev/rules.d/60-openobex.rules
Reading rules file: /usr/lib/udev/rules.d/60-pcmcia.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-alsa.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-input.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-serial.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage-tape.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-v4l.rules
Reading rules file: /usr/lib/udev/rules.d/60-rfkill.rules
Reading rules file: /etc/udev/rules.d/60-schedulers.rules
Reading rules file: /usr/lib/udev/rules.d/61-accelerometer.rules
Reading rules file: /usr/lib/udev/rules.d/61-gnome-bluetooth-rfkill.rules
Reading rules file: /usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
Reading rules file: /usr/lib/udev/rules.d/63-md-raid-arrays.rules
Reading rules file: /usr/lib/udev/rules.d/64-btrfs.rules
Reading rules file: /usr/lib/udev/rules.d/64-md-raid-assembly.rules
Reading rules file: /usr/lib/udev/rules.d/69-cd-sensors.rules
Reading rules file: /usr/lib/udev/rules.d/69-dm-lvm-metad.rules
Reading rules file: /usr/lib/udev/rules.d/70-infrared.rules
Reading rules file: /usr/lib/udev/rules.d/70-mouse.rules
Reading rules file: /usr/lib/udev/rules.d/70-power-switch.rules
Reading rules file: /usr/lib/udev/rules.d/70-printers.rules
Reading rules file: /usr/lib/udev/rules.d/70-uaccess.rules
Reading rules file: /usr/lib/udev/rules.d/71-seat.rules
Reading rules file: /usr/lib/udev/rules.d/73-seat-late.rules
Reading rules file: /usr/lib/udev/rules.d/75-net-description.rules
Reading rules file: /usr/lib/udev/rules.d/75-probe_mtd.rules
Reading rules file: /usr/lib/udev/rules.d/75-tty-description.rules
Reading rules file: /usr/lib/udev/rules.d/77-nm-olpc-mesh.rules
Reading rules file: /usr/lib/udev/rules.d/78-sound-card.rules
Reading rules file: /usr/lib/udev/rules.d/80-drivers.rules
Reading rules file: /usr/lib/udev/rules.d/80-net-setup-link.rules
Reading rules file: /usr/lib/udev/rules.d/80-udisks2.rules
Reading rules file: /etc/udev/rules.d/81-backlight.rules
Reading rules file: /usr/lib/udev/rules.d/85-regulatory.rules
Reading rules file: /usr/lib/udev/rules.d/85-tlp.rules
Reading rules file: /usr/lib/udev/rules.d/90-alsa-restore.rules
Reading rules file: /etc/udev/rules.d/90-hdmi.rules
Reading rules file: /usr/lib/udev/rules.d/90-pulseaudio.rules
Reading rules file: /usr/lib/udev/rules.d/90-vconsole.rules
Reading rules file: /usr/lib/udev/rules.d/95-cd-devices.rules
Reading rules file: /usr/lib/udev/rules.d/95-dm-notify.rules
Reading rules file: /usr/lib/udev/rules.d/95-udev-late.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-csr.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-hid.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-wup.rules
Reading rules file: /usr/lib/udev/rules.d/99-systemd.rules
rules contain 196608 bytes tokens (16384 * 12 bytes), 22511 bytes strings
9077 strings (81072 bytes), 7213 de-duplicated (60426 bytes), 1865 trie nodes used
device 0x7f54a369d440 has devpath '/devices/pci0000:00/0000:00:02.0/drm/card0'
device 0x7f54a36b7b90 filled with db file data
device 0x7f54a36ba350 has devpath '/devices/pci0000:00/0000:00:02.0'
device 0x7f54a36bc530 has devpath '/devices/pci0000:00'
GROUP 91 /usr/lib/udev/rules.d/50-udev-default.rules:32
IMPORT builtin 'path_id' /usr/lib/udev/rules.d/60-drm.rules:3
device 0x7f54a36ba350 filled with db file data
RUN 'uaccess' /usr/lib/udev/rules.d/73-seat-late.rules:15
handling device node '/dev/dri/card0', devnum=c226:0, mode=0660, uid=0, gid=91
preserve permissions /dev/dri/card0, 020660, uid=0, gid=91
preserve already existing symlink '/dev/char/226:0' to '../dri/card0'
created db file '/run/udev/data/c226:0' for '/devices/pci0000:00/0000:00:02.0/drm/card0'
ACTION=add
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
DEVTYPE=drm_minor
ID_FOR_SEAT=drm-pci-0000_00_02_0
ID_PATH=pci-0000:00:02.0
ID_PATH_TAG=pci-0000_00_02_0
MAJOR=226
MINOR=0
SUBSYSTEM=drm
TAGS=:seat:uaccess:
USEC_INITIALIZED=39014
run: 'uaccess'
Unload module index
Unloaded link configuration context.