1 votes

Exécuter un script shell au démarrage (Xubuntu 20.04)

Je suis en train de chercher un moyen d'automatiser le lancement d'un script shell après la connexion à Xubuntu.
J'ai vérifié de nombreuses autres questions et réponses et n'ai toujours pas trouvé de solution.

Voici le script que j'essaie d'exécuter:

#!/bin/sh

SH_PATH="`dirname \"$0\"`"
xkbcomp ${SH_PATH}/keyboardmap $DISPLAY

Il s'agit d'un script basé sur le Correcteur de délai de verrouillage des majuscules Linux qui modifie la touche de verrouillage des majuscules pour qu'elle agisse comme sur la plateforme Windows, de sorte qu'elle puisse être utilisée pour mettre en majuscule tout en tapant rapidement.

J'ai essayé de créer une entrée dans Session et démarrage -> Démarrage automatique des applications

Session et Démarrage

Voici ce que j'ai essayé:

/home/yooks/Scripts/fix_capslock.sh
sh /home/yooks/Scripts/fix_capslock.sh
sh -c "sh /home/yooks/Scripts/fix_capslock.sh"
sh -c "/home/yooks/Scripts/fix_capslock.sh"

Le script s'exécute correctement lorsque je le lance depuis le terminal sur n'importe quel chemin.
Quel est le moyen le plus simple de faire en sorte que ce script s'exécute chaque fois que je me connecte à Xubuntu?

1voto

Terrance Points 35422

En fonction du gestionnaire d'affichage (DM) que vous utilisez, cela déterminera la valeur de $DISPLAY. Étant donné que votre script s'exécute en réalité sans shell au moment de la connexion, aucun $DISPLAY n'est défini. Pour remédier à cela, vous voudrez peut-être ajouter les lignes suivantes après la ligne #!/bin/sh dans votre script:

#Get Display Manger
DM=$(/usr/bin/basename $(/bin/cat /etc/X11/default-display-manager))

#Set Display based on DM and login type
case $DM in
    lightdm)
        export DISPLAY=:0;;
    gdm3)
        grep -E "# AutomaticLogin|AutomaticLoginEnable = false" /etc/$DM/*.conf >/dev/null && export DISPLAY=:1 || export DISPLAY=:0;;
    *);;
esac

À travers des tests, j'ai découvert que lorsque je me connecte à mon système avec LightDM, l'Affichage a toujours été :0 quelle que soit la connexion automatique ou non. Mais avec GDM3, si vous avez la connexion automatique configurée, elle a été :0, mais si vous n'avez pas la connexion automatique, elle a été :1. J'exécute un script qui lance automatiquement Firefox à certains moments, et en ajoutant ceci pour définir le $DISPLAY, cela fait en sorte que Firefox se lance à partir du script sans qu'il ne s'exécute dans un terminal à ce moment-là.

J'espère que cela aide!

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X