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

Daniel Huhardeaux daniel.huhardeaux@::1
Jeu 24 Juil 10:51:46 CEST 2025


Bonjour

Pour la postérité.

Aucune solution n'étant fonctionnelle sans connexion -merci Antoine pour 
le script- je me suis résigné à connecter le user en automatique au 
démarrage de la machine puis utilise .bashrc pour lancer les commandes 
et /etc/gdm3/PostSession pour fermer les applications.

Bonne journée

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 :-)
>
>> #!/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