Как запустить скрипт при входе / выходе из Unity?

У меня есть два сценария - один для монтирования некоторых папок через SSHFS - и один для размонтирования.

Я хотел бы запустить сценарий монтирования при запуске моего рабочего стола Ubuntu по умолчанию (после того, как я войду в систему с графической консоли) - и сценарий размонтирования, когда я "Выйду из системы..." с колесика шестерни в правом верхнем углу рабочий стол.

Пожалуйста, может кто-нибудь сказать мне, как этого добиться? Каковы наиболее удобные / стандартные зацепки для запуска команд при запуске / выходе с рабочего стола?

3 ответа

Решение

Решением было использование выскочки задач. Мне потребовалось две задачи - одна запускалась при инициализации рабочего стола для пользователя; второй, когда истекает сеанс пользователей. Следующие два скрипта работают для меня под Ubuntu 14.04.

В ~/.config/upstart/desktopOpen.conf

description "Desktop Open Task"
start on desktop-start
task
script
# Commands to mount sshfs go here as shell-script.
end script

В ~/.config/upstart/desktopClose.conf

description "Desktop Close Task"
start on session-end
task
script
# Commands to unmount sshfs go here as shell-script.
end script

Мои пальцы скрещены, что эти события будут продолжать соответствовать требованиям в будущих выпусках Ubuntu. Я думал, что стоит опубликовать свое решение здесь - на случай, если оно пригодится другим.

Учитывая ваше требование запуска задания при входе в Unity, а не для других входов в систему, задание сеанса Upstart кажется идеальным.

Вы, возможно, заметили это: процессы, которые вы запускаете после входа в систему GUI менее чем за секунду init процесс. это init является надлежащей инициализацией Upstart, и вы можете запускать и останавливать сеансовые задания на основе событий, генерируемых им. Никаких корневых привилегий не требуется вообще. Еще лучше (или хуже в зависимости от перспективы), это еще не полностью поддерживается для безголовых систем. Вход в SSH не запустил пользователя init из быстрого теста, который я только что сделал.

Чтобы создать сессионное задание, создайте новый .conf файл в ~/.config/upstart, Это основной каталог по умолчанию для заданий сеанса Upstart ($XDG_CONFIG_HOME/upstart), создайте его, если его не существует. Вот пример работы:

tee ~/.config/upstart/myjob.conf <<EOF
description "My job"
start on desktop-start
stop on desktop-end

script 
       firefox 'http://upstart.ubuntu.com/cookbook/#session-job'
end script
EOF

Вы можете вручную контролировать это:

start myjob 
# or
initctl start myjob

service Команда используется для управления системными заданиями (те, в /etc/init.d или же /etc/init). Для управления сессионными заданиями необходимо использовать initctl команда, которая используется для взаимодействия с Upstart.

Увидеть man upstart-events для большего количества событий вы можете использовать.

Вот несколько советов по запуску скрипта после входа в систему:

Сценарий StackOverflow для Linux после загрузки: Cliff notes должен поместить ваш *.sh файл в /etc/profile.d.

Если вы хотите запускать скрипты при загрузке, вот несколько советов для этого:

Сценарий StackOverflow для Linux после загрузки: Примечания к скале должны использовать /etc/rc.local или crontab.

Другие вопросы по тегам