Изменить Gsetting со скриптом при выходе

Система:

Ubuntu Raring Ringtail (13.04) из свежей установки.

Цель:

Главное: изменить настройки (обои для рабочего стола) с помощью скрипта при выходе пользователя из системы.

Что я сделал: (внимательно прочитайте)

Я пытаюсь остановить приложение с именем разнообразие ( это) в Logout, в которое я поместил свои обходные пути. Variety - это приложение автозапуска, поэтому оно запускается каждый раз, когда я вхожу в систему. Variety имеет функцию on_quit() а также force_quit_thread() которые вызываются, когда процесс приложения останавливается. Итак, я добавил свою строку сценария Python внутри, которая выполняет мой настоящий сценарий (normalize). Когда я пытался нормально отказаться от разнообразия, он делает то, что я хочу! Однако, когда система выходит из системы, любой процесс, который я запустил, также должен быть остановлен. Но потом я понял, что это не так. Итак, я не мог использовать этот способ.

Это позволило мне использовать другой способ убить процесс сорта вручную, когда я выхожу из системы. я пытался ~/.bash_logout (Я сомневаюсь, потому что я знаю, что автозапуск не работает на Bash); ~/etc/gdm/PostSession/Default (Но я не использую gdm); ~/etc/lightdm/lightdm.conf (Этот тоже не работает! Как получилось?); pam_script / pam-script (я не знаю, как с ним работать. Действительно отличается.)

Получилось:

Но проблема возникает, когда я пытаюсь выйти из своей учетной записи. Он не выполняет ни on_quit(), ни force_quit_thread(). И журнал, который я захватил с ~/nohup.out посмотрите последнюю строку, вот вы:

.... 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.

Они потеряли доступные ресурсы, верно? Не уволился нормально и значит, сеттинг не изменился.

подробности

1) Добавлен скрипт внутри quit functions

Это находится на /opt/extras.ubuntu.com/variety/variety/VarietyWindow.py:

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

2) Скрипт внутри нормализуется

Цель: смена обоев при выходе сорта.

<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) Конфигурационный файл LightDM

Единственное, что меня смущает, так это то, что в его документации нет упоминания session-cleanup-script, Это устарело?

 [SeatDefaults]
    пользовательский сеанс = убунту
    Greeter-сессия = единство-Greeter
    автовход пользователь =
    сеанс очистка-скрипт =/ дом / Abdillah/ Инструменты / команда / выход из системы 

4) файл выхода из системы содержит:

Файл.self-log все еще пуст = = ошибка

 #!/ Bin/ Баш
    echo $(cat "${HOME}"/.self-log)" |fail? (OnScript)" > "${HOME}"/.self-log #append log
    Разновидность Килла
    /opt/extras.ubuntu.com/variety/bin/variety -q
    echo $(cat "${HOME}"/.self-log)" |Success? (OnScript)" > "${HOME}"/.self-log #log
    выход 0 

Вопрос

Если кто-то думает, что вышеприведенное условие очень специфично, просто ответьте на следующий вопрос. 1. Как выполнить скрипт непосредственно при выходе из системы (CMIW вышеописанными способами. Если нет, пожалуйста, любые предложения) или 2. Как я могу правильно остановить сорт, когда я вышел из системы? (Так вызывается on_quit())

Возможное решение

  • Начните разнообразие с [StartUpApplication] in bash и используйте скрипт ~/.bash_logout для остановки. Но как?

Хорошо. Это долго. Но я стараюсь сделать это как можно яснее. Потому что там есть много вопросов, связанных с этим, которые я прочитал. Действительно нужна помощь. Спасибо.

1 ответ

Решение

Решение не простое. Требуется запуск скрипта при входе в X и ожидание сеанса X и. К счастью, у нас есть inotify и pid gnome-сессии.

Процесс сорта уже должен быть корректно завершен во время выполнения скрипта.

  1. устанавливать inotify-tools пакет.
  2. Создайте или измените скрипт ~/.xprofile и добавьте в него следующую строку

    sh .xlogout &
    
  3. Создайте ~/.xlogout со следующим содержимым

    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
    
Другие вопросы по тегам