Изменить 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-сессии.
Процесс сорта уже должен быть корректно завершен во время выполнения скрипта.
- устанавливать
inotify-tools
пакет. Создайте или измените скрипт ~/.xprofile и добавьте в него следующую строку
sh .xlogout &
Создайте ~/.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