.xinitrc против программ автозапуска AwesomeWM. Что лучше?

Я искал способ, чтобы начать некоторые пользовательские приложения, когда я войти в свою сессию в LightDM. Пока что я нашел два разных способа:

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

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

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

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

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

25
задан xvlaze
09.04.2023 4:48 Количество просмотров материала 3673
Распечатать страницу

3 ответа

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

почему = если вы выходите из одной из ваших программ автозапуска *всегда" и хотите перезапустить их вы (а) перезапустить X [закрытие все в процессе], (б) перезапустить их из оболочки [выходные сообщения теперь перейти к этой оболочке], (В) создать специальный код повторного запуска в rc.lua [поверх кода запуска, который вы ввели .файла

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

    local gears         = { table   = require( "gears.table" )          ,
                            p_call  = require( "gears.protected_call" ) }

    gears.p_call( dofile, path_this .. "runonce.lua" )

b) и вот часть "когда все сделано хорошо" (IMHO), которая находится в runonce.Луа...

    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 перезагружает удивительный [ничего не меняется, просто сбрасывает memmory] и, конечно, приложения, которые вы всегда want запускаются точно так же, как и в первый раз

1
отвечен David Sorkovsky 2023-04-10 12:36

обновить 2018:

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

Оригинал:

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

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

второй лучший способ-непосредственно из .xinitrc.

1
отвечен Emmanuel Lepage Vallee 2023-04-10 14:53

у меня есть очень простой скрипт с именем /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")

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

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

0
отвечен Daishi 2023-04-10 17:10

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх