[Linux] Exécution au démarrage d'un script sh dans un tty
Antoine Delaporte
adlp@::1
Mar 22 Juil 16:02:30 CEST 2025
De : Daniel Huhardeaux
> Envoyé : mardi 22 juillet 2025 à 2:49 PM UTC+2
> Bonjour,
>
> soit le script
On dirait un énonce du Bac :-)
> #!/bin/sh
>
> $(which wayfire)
> export WAYLAND_DISPLAY=wayland-1
> $(which wayvnc) fd99:1234:beef:cafe::19
>
> exit 0
>
> à exécuter au démarrage de l'ordinateur pour un utilisateur Z. Lorsqu'il
> est exécuter à partir d'un tty auquel est connecté l'utilisateur Z il
> est fonctionnel.
Donc il n'est pas à exécuter au démarrage de l'ordinateur, car
l'utilisateur n'est pas loggué.
Et quand bien même, il y a de l'auto-logon, ca n'est pas au démarrage de
l'ordi, mais bien au login de l'user
> Je cherche à présent à le faire exécuter au démarrage de l'ordinateur et
> ça coince. Les tests sont effectués en étant connecté en ssh à cet
> ordinateur: je me fais jeter par /dev/dri/render128 lorsque wayfire se
> lance, les droits étant root:render u=rw g=rw o=
>
> Question: pourquoi le même utilisateur peut l'exécuter en terminal et
> pas via ssh?
En fait, il y a des var d'env qui permettent de faire le lien avec
l'environnement graphique
> J'ai créé un service systemctl --user: il n'est même pas exécuté !
L'as-tu enabled ? oui la question est con... mais je ne te cacherais pas
que je l'ai déjà faite celle-là...
> La configuration: Mac mini M2 sous Asahi Linux Debian 13, X11 n'est plus
> suivi (par Debian ou Debian Asahi Linux, je ne sais) donc passage à
> Wayland. Et pour utiliser VNC bein ... c'est la galère, pas de gestion
> directe avec wayland, faut passer par les compositors.
>
> Si une bonne idée venait à germer auprès de vous qui ne savez que faire
> puisque tout est calme au boulot ou vous êtes en vacances et vous vous
> ennuyez ;), je serai preneur.
Bon voici un bout de code (avec lequel je jouais avant-hier ;)) qui
pourrait t'aider...
Je ne vais pas te cacher que l'objectif de ce code de test est d'envoyer
un popup sur l'ordi de quelqu'un de proche, via un crontab.
L'idée de ce code est de
* Récupérer l'user loggué
* Récupérer si on est en X11/wayland
* afficher une popup a la con, voire un popup questionneur (si tu as
zenity)
Oui ce code ne passera pas partout (en gros qu'un seul user loggé), etc..
=====
#!/bin/bash
# 🔍 Détection de l'utilisateur graphique actif
USER=$(loginctl list-users | awk '$1 ~ /^[0-9]+$/ { print $2 }' | while
read u; do
SESSION=$(loginctl list-sessions | grep "$u" | awk '{print $1}')
for s in $SESSION; do
TYPE=$(loginctl show-session "$s" -p Type | cut -d= -f2)
if [[ "$TYPE" == "x11" || "$TYPE" == "wayland" ]]; then
echo "$u"
break
fi
done
done | head -n1)
if [[ -z "$USER" ]]; then
echo "❌ Aucun utilisateur graphique détecté"
exit 1
fi
UID=$(id -u "$USER")
DISPLAY=$(pgrep -u "$UID" -a X | grep -o ":[0-9]" | head -n1)
DISPLAY=${DISPLAY:-:0}
XAUTHORITY="/home/$USER/.Xauthority"
DBUS_SESSION="/run/user/$UID/bus"
echo "✅ Utilisateur graphique : $USER"
echo "🖼️ DISPLAY : $DISPLAY"
# 🔔 Envoi d’une notification
sudo -u "$USER" DISPLAY="$DISPLAY"
DBUS_SESSION_BUS_ADDRESS="unix:path=$DBUS_SESSION" \
notify-send "🔔 Action requise" "Coucou $USER, choisis une option..."
# 📋 Boîte de dialogue avec boutons
CHOIX=$(sudo -u "$USER" DISPLAY="$DISPLAY" XAUTHORITY="$XAUTHORITY" \
zenity --question \
--title="Assistant système" \
--text="Souhaites-tu lancer une sauvegarde ?" \
--ok-label="Oui, je sauvegarde !" \
--cancel-label="Non, plus tard" \
&& echo "OK" || echo "CANCEL")
# 🔍 Action selon le choix
if [[ "$CHOIX" == "OK" ]]; then
logger "L'utilisateur $USER a choisi de lancer la sauvegarde"
# /usr/local/bin/mon-script-de-sauvegarde.sh
else
logger "L'utilisateur $USER a repoussé la sauvegarde"
fi
=====
> Bonne journée
> --
>
Plus d'informations sur la liste de diffusion linux