[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