[Linux] Exécution au démarrage d'un script sh dans un tty

Daniel Huhardeaux daniel.huhardeaux@::1
Mar 22 Juil 17:42:31 CEST 2025


Le 22/07/2025 à 16:02, Antoine Delaporte a écrit :
>
> De : Daniel Huhardeaux
>> Envoyé : mardi 22 juillet 2025 à 2:49 PM UTC+2
>
>> Bonjour,
>>
>> soit le script
> On dirait un énonce du Bac :-)
Un peu tard je crois ;-)
>
>> #!/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
J'aimerai bien qu'il soit exécuté au démarrage de l'ordinateur via "su 
<user> monScript" mais cela ne fonctionne pas.
> [...]
>> 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à...

Oui. Je me suis en fait rendu compte qu'il s'exécute lorsque 
l'utilisateur se loggue, ce qui ne m'arrange pas plus sauf si cela 
pouvait se faire en se loggant via ssh ce qui ne fonctionne pas

>> 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.
Je vais tester, merci.
>
> 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