Программы .xinitrc vs. AwesomeWM Autorun. Какой из них лучше?

786
xvlaze

Я искал способ запустить некоторые пользовательские приложения при входе в мою сессию в LightDM. До сих пор я нашел два разных способа:

1. Настройте .xinitrc: например, если я хочу добавить окно терминала всякий раз, когда я запускаю X-сервер, мне нужно будет добавить только xterm -geometry 80x50+494+51 &раньше exec awesome.

2. Добавьте некоторые приложения в rc.lua: как видно здесь, приложения запускаются при запуске AwesomeWM.

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

Первый способ будет работать только в том случае, если я явно startxвведу TTY. Запуск X-сервера без этой команды (например, обычное включение компьютера) не запустит приложения. Так, как я мог предотвратить это?

Главный вопрос здесь, однако, заключается в следующем: если я смогу сделать .xinitrcработу, будет ли это «лучшим» (с точки зрения эффективности и безопасности) способом, чем редактирование моей собственной копии rc.lua?

0

3 ответа на вопрос

1
Emmanuel Lepage Vallee

Обновление 2018:

Использование автозапуска XDG по-прежнему является стандартным совместимым способом сделать это. Однако в Awesome v4.3 добавлена ​​новая функция awful.spawn.once, которая заботится о сохранении свойства «единственного экземпляра» приложения непосредственно на X-сервере. Это позволяет spawnвызываться несколько раз, при этом выполняется только один раз. Работает через рестарт.

Оригинал:

Лучше всего реализовать протокол автозапуска XDG. Обычно речь идет о добавлении файлов, чтобы ~/.config/autostartпотом скрипт или демон позаботились о запуске приложений. Этот скрипт или демон запускается либо менеджером сеансов, либо из .xinitrc.

rc.luaне следует использовать для автозапуска, так как он может быть перезапущен в случайное время ( mod4+ctrl+r) и выполнить все заново. У некоторых пользователей есть сложные системы для определения того, было ли что-то уже запущено, но, на мой взгляд, оно того не стоит.

Второй лучший способ напрямую .xinitrc.

1
David Sorkovsky

Я считаю, что программы автозапуска AwesomeWM лучше, когда они сделаны хорошо

Почему = Если вы выходите из одной из программ «автозапуск * всегда» и хотите перезапустить их, вы (a) перезапустите X [закрытие всего процесса], (b) перезапустите их из оболочки [выходные сообщения теперь отправляются в эту оболочку], (c) создайте специальный код перезапуска в rc.lua [поверх кода запуска, который вы положили в .xinitrc

Как = Это хорошо работает для меня ... а) Как только после строки отладки в rc.lua добавить ...

 local gears = { table = require( "gears.table" ), p_call = require( "gears.protected_call" ) }  gears.p_call( dofile, path_this .. "runonce.lua" ) 

б) А вот часть «когда сделано хорошо» (ИМХО), которая находится в runonce.lua ...

 local naughty = require( "naughty" ) local awful = { spawn = require( "awful.spawn" ) } local string = { sub = string.sub, find = string.find, format = string.format }  -- This function makes sure the application is not restarted when awesome is reloaded local function run_once( command ) local args_start = string.find( command, " " ) local pgrep_name = args_start and command:sub( 0, args_start - 1 ) or command  local command = "pgrep -u $USER -x " .. pgrep_name .. " > /dev/null || (" .. command .. ")"  awful.spawn.easy_async_with_shell( command, function( stdout, stderr, exitreason, exitcode ) if exitcode ~= 0 then naughty.notify({ preset = naughty.config.presets.critical, text = string.format( "%s\n\n%s\n%s\n%s\n%s",  command, stdout, stderr, exitreason, exitcode ) }) end end ) end  -- Start these if not already running run_once( "guake &> /dev/null" ) run_once( "remmina -i &> /dev/null" ) run_once( "skypeforlinux" ) 

Почему я считаю, что это сделано хорошо ...

1) Работает с программами, которые имеют параметры [ищет только имя, а не аргументы] 2) Имеет предупреждение, если что-то идет не так [без убийства Awesome] 3) Редактируйте только нижнюю часть

Наконец ... mod + ctrl + r перезагружает классно [ничего действительно не меняется, просто сбрасывает память] и, конечно, приложения, которые вы всегда хотите, перезапускаются точно так же, как в первый раз

Обратите внимание, что AwesomeWM git-master (версия 4.3) имеет более точную встроенную версию https://awesomewm.org/apidoc/libraries/awful.spawn.html#once Emmanuel Lepage Vallee 5 лет назад 0
Приятно знать, что появится стандартный метод - я проверю его при обновлении до ожидаемого выпуска 4.3 David Sorkovsky 5 лет назад 0
0
Daishi

У меня есть очень простой скрипт с именем /usr/local/bin/awesome_run_once:

#!/bin/bash  pgrep $@ > /dev/null || ($@ &) 

В конце своего ~/.config/awesome/rc.luaя добавляю несколько звонков с приложением, которое хочу запустить:

-- auto start programs awful.util.spawn("awesome_run_once wicd-client") awful.util.spawn("awesome_run_once redshift") awful.util.spawn("awesome_run_once nextcloud") 

Работает достаточно хорошо.

Я получил эту идею от Autostart - круто, но страница, кажется, больше не онлайн ...