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

Как и во многих случаях, выбор времени является главной проблемой здесь.

  1. Ваш скрипт должен запускаться на уровне пользователя после входа в систему, поскольку он редактирует элементы запуска, которые находятся на уровне пользователя.
  2. Даже тогда, глядя на то, что должен делать скрипт (читая ваше объяснение), скрипту нужно немного подождать, пока рабочий стол полностью загрузится; 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
Другие вопросы по тегам