Запустить скрипт запуска, который требует сеанса xserver
У меня есть Python3-скрипт, который использует Gtk
-модуль (импортируется из gi.repository
, для функции недавнего менеджера), требующая ссылку на текущий сеанс xserver (lightdm
сервис в 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 постоянной?)
(Мой сценарий создает быстрые списки последних файлов и добавляет их в меню щелчка правой кнопкой мыши, аналогичное окнам: 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 > Startup Applications > Add.
Запустите его для всех пользователей
Если вам нужен скрипт для всех пользователей (после входа в систему), вы можете добавить его в Startup Applications для всех пользователей одновременно.
Для этого скопируйте приведенный ниже код в пустой файл, отредактируйте строки, начиная с 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