У меня есть исполняемый файл C ++, который включает в себя некоторый код GTK. Я хочу, чтобы это приложение запускалось при запуске моей машины (с правами root).
Я попытался с помощью сценария инициализации (который отлично работает, когда я использую его из моего пользовательского сеанса), но, посмотрев на файл журнала моего приложения, я вижу, что последняя запись в журнале перед вызовом Gtk::Application::create()
так что кажется, что слишком рано инициализировать GTK.
Как запустить приложение после открытия сеанса пользователя, чтобы инициализация GTK не вызывала сбоев?
Создайте файл .desktop своего приложения и поместите его в /etc/xdg/autostart/
для каждого пользователя или $HOME/.config/autostart/
для текущего пользователя.
Если вы хотите загрузить это приложение как root для обычных пользователей, вы можете использовать gksu или другие инструменты для авторизации привилегий.
Кроме того, вы можете увидеть, как устроен сетевой менеджер. Он запускает модуль сетевого менеджера в качестве init-скрипта при запуске системы и загружает nm-апплет, который является GUI для обычного пользователя, при загрузке сеанса пользователя. Таким образом, сетевой менеджер может управляться во всей среде рабочего стола (например, Gnome, KDEE, xfce …) пользователями рабочего стола.
Других решений пока нет …