запустить скрипт запуска, который требует сеанса xserver

запустить скрипт запуска, который требует сеанса xserver

У меня есть скрипт python3, который использует -module Gtk(импортированный из gi.repositoryдля функциональности recent-manager), требующий ссылку на текущий сеанс xserver ( lightdmservice в 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

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

  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 > Автозагрузка приложений > Добавить.

Запустите его длявсе пользователи

Если вам нужно запустить скриптдля всех пользователей(после входа в систему) Вы можете добавить его в автозагрузку приложений для всех пользователей одновременно.

Для этого скопируйте приведенный ниже код в пустой файл, отредактируйте строки, начиная с 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

Связанный контент