У меня есть скрипт python3, который использует -module Gtk
(импортированный из gi.repository
для функциональности recent-manager), требующий ссылку на текущий сеанс xserver ( lightdm
service в Ubuntu).
Запуск вручную через консоль (в сеансе xserver) работает, но я хочу, чтобы он запускался автоматически.
Скрипт init.d не будет работать (установка переменной DISPLAY в 0.0). Использование xvfb-run
заставило скрипт init.d запустить мой скрипт, но в виртуальной среде xserver, как и ожидалось (не моей). Нет ли эквивалента, который подключал бы скрипт init.d к текущему сеансу xserver?
До сих пор я пробовал .xinitrc
файл (в ~/
, да, он исполняемый), а также создание , .xprofile, .xsession, .xsessionrc
которые все ссылаются на первый через ln -s
. Я пытался добавить gnome-terminal &
для тестирования, но терминал тоже не появился, будь то после перезагрузки lightdm
или даже всего ПК и повторного входа в систему.
Я тоже пробовалЗапустить скрипт конфигурации при возобновлении сеанса X, но это приводит к ошибке Can't open /usr/share/acpi-support/power-funcs
.
Используя upstart
, как предложеноЗапустить скрипт запуска с помощью lightdmтакже не предоставил бы переменную отображения xserver (или дескриптор?), просто запустил бы ее после lightdm
запуска, верно?
Может быть, поместить его куда-нибудь xorg.conf
? (Как сделать настройку xrandr постоянной?) Это меня не смущает..
(Мой скрипт создает быстрые списки последних файлов и добавляет их в контекстное меню Unity Launcher, аналогично Windows:https://github.com/thirschbuechler/ubuntu-recentquicklists)
решение1
Как и во многих случаях, здесь главным вопросом является время.
- Ваш скрипт должен работать на уровне пользователя.после входа в систему, так как он редактирует элементы запуска, которые находятся на уровне пользователя.
- Даже в этом случае, если посмотреть на то, что должен делать скрипт (читая ваше объяснение), скрипту нужно немного подождать, пока рабочий стол полностью загрузится; Unity Launcher — это не первое, что должно быть «готово» после входа в систему. Если скрипт запустится слишком рано, он либо прервется, либо не достигнет цели.
Суммируя
Вам необходимо запустить скрипт примерно через 10–15 секунд после входа в систему, что можно сделать, добавив:
/bin/bash -c "sleep 15 && python /path/to/script.py"
(если скрипт неисполняемый) или
/bin/bash -c "sleep 15 && /path/to/script.py"
(если сценарийявляетсяисполняемый файл) в автозагрузку приложений пользователя: Dash > Автозагрузка приложений > Добавить.
Запустите его длявсе пользователи
Если вам нужно запустить скриптдля всех пользователей(после входа в систему) Вы можете добавить его в автозагрузку приложений для всех пользователей одновременно.
Для этого скопируйте приведенный ниже код в пустой файл, отредактируйте строки, начиная с Name=
и укажите правильный путь к скрипту в строке:
Exec=/bin/bash -c "sleep 15 && python /path/to/script.py"
затем сохраните файл /etc/xdg/autostart
как launch_script.desktop
(или как вам нравится, главное, чтобы он заканчивался на .desktop
)
[Desktop Entry]
Name=Name
Exec=/bin/bash -c "sleep 15 && python /path/to/script.py"
Type=Application