web-dev-qa-db-fra.com

Modifier le paramètre avec le script à la déconnexion

Système :

Ubuntu Raring Ringtail (13.04) à partir d'une nouvelle installation.

Objectif :

Principal: Changer le gsetting (fond d'écran) avec un script lors de la déconnexion de l'utilisateur.

Ce que j'ai fait: (lire attentivement)

J'essaie d'arrêter une application nommée variété ( celle-ci ) à la déconnexion dans laquelle j'ai placé mes solutions de contournement. Variety est une application à démarrage automatique, elle démarre donc chaque fois que je me connecte. Variety a une fonction on_quit() et force_quit_thread() qui sont appelées lorsque le processus d'application s'est arrêté. J'ai donc ajouté ma ligne de script python à l'intérieur, qui exécute mon vrai script (normalize). Quand j'ai essayé de quitter la variété normalement, il fait ce que je veux! lorsque le système me déconnecte, tout processus que j'ai commencé doit également être arrêté. Mais ensuite, je me suis rendu compte que non.

Cela m'a permis d'utiliser une autre façon de tuer le processus de variété manuellement lorsque je me déconnecte. J'ai essayé ~/.bash_logout (J'en doute, car je sais que le démarrage automatique ne fonctionne pas sur bash); ~/etc/gdm/PostSession/Default (Mais je n'utilise pas gdm); ~/etc/lightdm/lightdm.conf (Celui-ci ne fonctionne pas non plus! Comment se fait-il?); pam_script/pam-script (je ne sais pas comment travailler avec ça. Vraiment différent.)

Arrivé :

Mais, le problème survient lorsque j'essaie de me déconnecter de mon compte. Il n'exécute ni on_quit () ni force_quit_thread (). Et le journal que j'ai capturé de ~/Nohup.out voir dernière ligne, vous êtes ici:

.... bla-bla ... [only see last line]
IOError: [Errno socket error] [Errno 2] No such file or directory

(variety:15627): Gdk-WARNING **: variety: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.

Ils ont perdu les ressources disponibles, non? Pas quitté normalement alors et signifie, gsetting pas changé.

Détails

1) Script ajouté dans quit functions

C'est sur /opt/extras.ubuntu.com/variety/variety/VarietyWindow.py:

<pre>bashCommand = "/home/abdillah/Toolbox/command/normalize"
os.system(bashCommand)</pre>

2) Script à l'intérieur de normaliser

Objectif: changer le fond d'écran lorsque la variété quitte.

<pre>echo $(cat "${HOME}"/.self-log)"| normalize" > "${HOME}"/.self-log #append log
wallpaper=$(cat /home/abdillah/.wallpaper)
filename="file://"$wallpaper
configname=${filename/'#'/"%23"}
gsettings set org.gnome.desktop.background picture-uri $configname #the most important</pre>

3) Fichier de configuration LightDM

Celui qui me rend confus, c'est que dans c'est documentation , il n'y a pas de déclaration mentionnée session-cleanup-script. C'est obsolète?

[SeatDefaults] 
 User-session = ubuntu 
 Greeter-session = unit-greeter 
 Autologin-user = 
 Session-cleanup-script =/home/abdillah/Boîte à outils/commande/déconnexion

4) Le fichier de déconnexion contient:

Le fichier .self-log est toujours vide => échec

#!/bin/bash 
 echo $ (cat "$ {HOME}" /. self-log) "| fail? (OnScript)"> "$ {HOME}" /. self-log #append log 
 variété killall 
 /opt/extras.ubuntu.com/variety/bin/variety -q 
 echo $ (cat "$ {HOME}" /. self-log) " | Succès? (OnScript) ">" $ {HOME} "/. Self-log #log 
 Exit 0

Question

Quand quelqu'un pense, la condition ci-dessus est très spécifique, répondez simplement à la question suivante. 1. Comment exécuter le script directement à la déconnexion ( [~ # ~] cmiw [~ # ~] les moyens ci-dessus. Sinon, toute suggestion s'il vous plaît) ou 2. Comment puis-je arrêter la variété correctement lorsque je me suis déconnecté? (Donc on_quit () appelé)

Solution possible

  • Commencez la variété avec [StartUpApplication] in bash et utilisez le script ~/.bash_logout pour arrêter. Mais comment?

D'accord. c'est long. Mais j'essaie de rendre le plus clair possible. Parce que là-bas, il y a beaucoup de questions liées à cela que j'ai lues. J'ai vraiment besoin d'aide. Je vous remercie.

2
Abdillah

La solution n'est pas simple. Il nécessite le démarrage du script à la connexion X et l'attente de la session X et. Heureusement, nous avons inotify et pid de gnome-session.

Le processus de variété doit déjà être arrêté correctement au moment de l'exécution du script.

  1. Installer inotify-tools paquet.
  2. Créez ou modifiez le script ~/.xprofile et ajoutez-y la ligne suivante

    sh .xlogout &
    
  3. Créer ~/.xlogout avec le contenu suivant

    FILE=/tmp/.ICE-unix/$PPID            # pid of parent = gnome-session
    sleep 10s                            # wait for $FILE creation
    inotifywait -qe delete_self $FILE    # wait for $FILE deletion = logout
    # your code goes here                # = on_quit
    # gsettings reset org.gnome.desktop.background picture-uri
    
0
Grzegorz Żur