Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/11/2020, à 07:33

Compte supprimé

[résolu] udev rules : afficher une notification

Bonjour,
Je souhaite voir une notification visuelle 'notify-send' lorsque je connecte le HDMI. Le script est géré par udev rules (installé comme précisé ici --> https://doc.ubuntu-fr.org/son_via_le_port_hdmi)
Cependant, je n'y arrive pas :

if [[ $(cat /sys/class/drm/card0-HDMI-A-2/status | grep -Ec "^connected") -eq 1 ]]; then
        #log-file "HDMI TV connected" ~/bin/log-hotplugtv;
        /bin/sleep 2;
        export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
        sudo -u fab -E pacmd set-card-profile 0 output:hdmi-stereo-extra1;
        export DISPLAY=:0 notify_send "HDMI Tv connecté!"


else
        #log-file "HDMI TV disconnected" ~/bin/log-hotplugtv;
        export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
        sudo -u fab -E pacmd set-card-profile 0 output:analog-stereo;
        export DISPLAY=:0 notify-send "HDMI déconnecté!
fi
exit 0

J'ai essayé plusieurs rules dont :

# NAME: 99-hotplugtv.rules
# PATH: /etc/udev/rules.d
# DESC: Update pulseaudio output device when HDMI TV plugged / unplugged
# CALL: automatically called on system events
# DATE: Created Nov 26, 2016.
# NOTE: in future may requre systemd service hooks

ACTION=="change", SUBSYSTEM=="drm",ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/fab/.Xauthority", RUN+="/usr/local/bin/hotplugtv"
~                                                                               
~                 

Si vous savez comment je dois m'y prendre,
merci

Dernière modification par Compte supprimé (Le 20/11/2020, à 14:00)

#2 Le 16/11/2020, à 13:14

kamaris

Re : [résolu] udev rules : afficher une notification

Tu as testé le code en dehors des règles udev ?
Parce que ça par exemple :

export DISPLAY=:0 notify_send "HDMI Tv connecté!"

ça ne doit pas passer, il faut le faire en deux lignes.

Hors ligne

#3 Le 16/11/2020, à 15:04

Compte supprimé

Re : [résolu] udev rules : afficher une notification

Merci kamaris, j'ai rectifié (il me semblait que je procédais ainsi pour une ligne crontab)
Cette fois-ci, le code suivant a bien été testé roll et se comporte comme attendu si exécuté depuis un bash.
La boite de dialogue n'apparait cependant toujours pas lorsque le script est géré depuis les règles udev...

# UPDT: Dec 14, 2016 - Sometimes /sys/class/drm/card0 & sometimes /sys/class/drm/card1
#       so use /sys/class/dmcard* instead.

if [[ $(cat /sys/class/drm/card0-HDMI-A-2/status | grep -Ec "^connected") -eq 1 ]]; then
        #log-file "HDMI TV connected" ~/bin/log-hotplugtv;
        /bin/sleep 2;
        export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
        sudo -u fab -E pacmd set-card-profile 0 output:hdmi-stereo-extra1;
        export XAUTHORITY=/home/fab/.Xauthority
        export DISPLAY=:0
        /usr/bin/notify-send "HDMI Tv connecté!"


else
        #log-file "HDMI TV disconnected" ~/bin/log-hotplugtv;
        export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
        sudo -u fab -E pacmd set-card-profile 0 output:analog-stereo;
        export DISPLAY=:0
        /usr/bin/notify-send "HDMI déconnecté!"
fi
exit 0
"/usr/local/bin/hotplugtv" 29L, 1073C                         27,8          Bas

#4 Le 16/11/2020, à 15:17

kamaris

Re : [résolu] udev rules : afficher une notification

Je ne connais pas trop les règles udev malheureusement…
Tu t'es aidé de la doc : https://doc.ubuntu-fr.org/udev ? Elle a l'air assez complète.
Il y a notamment une partie test à la fin, histoire d'avoir quelques retours pour déboguer, parce que là perso je ne sais pas quoi dire…

Hors ligne

#5 Le 16/11/2020, à 15:28

Compte supprimé

Re : [résolu] udev rules : afficher une notification

Dans le paragraphe 5.4,  il est fait part des interactions avec l'environnement et de l'utilisation de ENV  ... C'est ce que j'ai essayé de faire dans 'les régles' post #1
Je vais continuer mes recherches...

#6 Le 16/11/2020, à 19:59

Sciensous

Re : [résolu] udev rules : afficher une notification

j'ai fait quelques scripts pour udev avec affichage zenity ou notify-send sans être un expert mais ça marche.
il me semble que ton script est bon SAUF le "!" du message qui sera interprété donc mettre des simple ' et non des doubles (ou enlève le ! du message)

à vérifier
cool


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#7 Le 16/11/2020, à 22:42

nany

Re : [résolu] udev rules : afficher une notification

Bonjour,




À tester :

/usr/local/bin/hotplugtv ;

#! /bin/bash

if grep -q "^connected" /sys/class/drm/card0-HDMI-A-2/status; then
  env DISPLAY="$DISPLAY" XAUTHORITY="$XAUTHORITHY" /usr/bin/notify-send "TV HDMI connecté !"
  /bin/sleep 2
  export PULSE_RUNTIME_PATH="/run/user/1000/pulse/"
  sudo -u fab -E pacmd set-card-profile 0 output:hdmi-stereo-extra1
else
  env DISPLAY="$DISPLAY" XAUTHORITY="$XAUTHORITHY" /usr/bin/notify-send "TV HDMI déconnecté !"
  export PULSE_RUNTIME_PATH="/run/user/1000/pulse/"
  sudo -u fab -E pacmd set-card-profile 0 output:analog-stereo
fi

 

/etc/udev/rules.d/99-hotplugtv.rules ;

ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="/usr/local/bin/hotplugtv"

ou (plus complet) ;

KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", ENV{HOTPLUG}=="1", ENV{DISPLAY}==":0", ENV{XAUTHORITY}=="/home/fab/.Xauthority", RUN+="/usr/local/bin/hotplugtv"

Vérifier avant le chemin de XAUTHORITY avec :

printenv XAUTHORITY

Chez moi, avec Ubuntu 20.04, XAUTHORITY=/run/user/1000/gdm/Xauthority.

Hors ligne

#8 Le 17/11/2020, à 08:38

Compte supprimé

Re : [résolu] udev rules : afficher une notification

Bonjour,
Merci @Nany.
La notification ne s'affiche toujours pas... (je n'ai pas oublier de faire: sudo udevadm control --reload-rules après chaque modification).
Le code s'exécute comme attendu depuis un bash.
Chez moi XAUTHORITY= "/home/fab/.Xauthority" ...

@sciensous:
Je n'ai pas l'impression que celui ci le soit interprété. Le '!' ne serait il pas interprété plutôt au sein d'un test?

#9 Le 17/11/2020, à 10:25

Sciensous

Re : [résolu] udev rules : afficher une notification

ok
je te propose un truc bête: dans tes conditions, crée un fichier temporaire pour vérifier que le script est bien lancé
en début et fin de condition
dans le genre
echo "connecté début" > /tmp/HDMI.test
echo "connecté fin" >> /tmp/HDMI.test
ou
echo "non connecté début" > /tmp/HDMI.test
echo "non connecté fin" >> /tmp/HDMI.test
suivant la condition

et de vérifier les fichiers dans chaque cas

cool


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#10 Le 19/11/2020, à 18:18

Compte supprimé

Re : [résolu] udev rules : afficher une notification

@Sciensous: test fichier ok . Le script est bien exécuté .

-----------------------------------------------------------------------------------------

nany a écrit :

ou (plus complet) ;

KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", ENV{HOTPLUG}=="1", ENV{DISPLAY}==":0", ENV{XAUTHORITY}=="/home/fab/.Xauthority", RUN+="/usr/local/bin/hotplugtv"

Ce ne serait pas plutôt :

KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", ENV{HOTPLUG}=="1", ENV{DISPLAY}=":0.0", ENV{XAUTHORITY}="/home/fab/.Xauthority", RUN+="/usr/local/bin/hotplugtv"

Ceci dit, toujours pas d'affichage de la notification.

J'ai lu qu'il y a eu un bug d'affichage avec notify_send avec udev . j'ai donc essayé avec zenity mais sans plus de résultats.
Je trouve le sujet mal documenté .Tout ce que je lis se rapporte à plusieurs années et aucunes des solutions évoquées ont fonctionné. Mais bon je n'ai peut-être bien chercher et mon anglais laisse à désirer...

#11 Le 19/11/2020, à 18:44

Sciensous

Re : [résolu] udev rules : afficher une notification

détails tout bête: le script est bien en mode executable ? (+x)

dans mon cas, les export sont dans mon script et je n'ai rien mis dans les ENV
(ENV{HOTPLUG}=="1" fait quoi ?)

autre: au lieu de "change" essaye "add" et "remove"
(2 lignes donc)

Dernière modification par Sciensous (Le 19/11/2020, à 18:44)


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#12 Le 20/11/2020, à 10:44

Compte supprimé

Re : [résolu] udev rules : afficher une notification

Bonjour,

Oui le script ainsi que la règle sont exécutables.
Sans le "change" la permutation du son pc/hdmi ne fonctionne pas...
En fait, je me demande si je ne dois pas créer une règle à part avec un autre script qui générerait juste l'affichage...
Je pourrais très bien me passer de cet affichage (utilité modérée) mais je suis quand même curieux de la réponse. D'autant que j'ai passé déjà pas mal de temps en recherche(ceci dit j'ai appris) ...

#13 Le 20/11/2020, à 11:07

MicP

Re : [résolu] udev rules : afficher une notification

Bonjour

En supposant que l'ID du compte utilisateur fab soit 1000
dans le script, remplacer :

export DISPLAY=:0 notify_send "HDMI Tv connecté!"

par :

sudo -u fab DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send 'HDMI Tv connecté!'

(et bien sûr l'autre ligne du script qui devra afficher la notification  'HDMI Tv déconnecté!'

=======
Il y a une petite faute de frappe dans le premier et deuxième message de ce fil de discussion :
remplacez notify_send par : notify-send
et un double guillemets à la fin de : "HDMI déconnecté!

Dernière modification par MicP (Le 20/11/2020, à 17:16)

Hors ligne

#14 Le 20/11/2020, à 13:59

Compte supprimé

Re : [résolu] udev rules : afficher une notification

Bonjour @MicP,
Merci pour ton intervention. Ceci fonctionne wink
Voici le script modifié :

#!/bin/bash
export PULSE_RUNTIME_PATH="/run/user/1000/pulse/"
if grep -q "^connected" /sys/class/drm/card0-HDMI-A-2/status; then
  /bin/sleep 2
  sudo -u fab -E pacmd set-card-profile 0 output:hdmi-stereo-extra1
  sudo -u fab DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send 'HDMI Tv connecté!'
else
  sudo -u fab -E pacmd set-card-profile 0 output:analog-stereo
  sudo -u fab DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send 'HDMI Tv déconnecté!'
fi

Merci à vous tous !!

Dernière modification par Compte supprimé (Le 20/11/2020, à 14:01)