Запустить скрипт запуска, который требует сеанса 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