¿Cómo puedo ejecutar comandos al iniciar en Awesome?

¿Cómo puedo ejecutar comandos al iniciar en Awesome?

Quiero ejecutar algunos comandos después de iniciar sesión si se inicia awesome-windowmanager. ¿Cómo puedo agregar comandos de inicio a awesome-config?

Respuesta1

De acuerdo a estowiki de ArchLinuxsolo debería necesitar agregar lo siguiente a su rc.lua:

-- Autorun programs
autorun = true
autorunApps = 
{ 
   "swiftfox",
   "mutt",
   "consonance",
   "linux-fetion",
   "weechat-curses",
}
if autorun then
   for app = 1, #autorunApps do
       awful.util.spawn(autorunApps[app])
   end
end

La wiki también muestra un par de formas más de lograr el mismo efecto.

Respuesta2

voy condex, hasta ahora.

$ cat /etc/X11/Sessions/awesome 
#!/bin/sh
# Awesome Xsession starter, based on Xsession shipped by x11-apps/xinit-1.0.5-r1
...
zenity --title "Autostart" --timeout=30 --question --text="Launch autostart items?" && dex -a
exec ck-launch-session /usr/bin/awesome

Entonces tengamos también algunos elementos de inicio automático:

$ ls -1 ~/.config/autostart/
gol.desktop
KeePass 2.desktop
skype-skype.desktop
tomboy.desktop
wpa_gui-wpa_supplicant.desktop
xterm-logs.desktop

Ejemplo de elemento de inicio automático:

$ cat ~/.config/autostart/gol.desktop 

[Desktop Entry]
Type=Application
Terminal=false
Name=Growl For Linux
Comment=Growl Desktop Notification System For Linux
Categories=GNOME;GTK;Utility;
Exec=/usr/bin/gol
Icon=/usr/share/growl-for-linux/data/icon.png
X-GNOME-Autostart-enabled=true
X-KDE-autostart-after=panel
X-Desktop-File-Install-Version=0.18

Respuesta3

ElImpresionante wiki sugierede esta manera funcionará al recargar Awesome.

Pon esto en runonce.lua

-- @author Peter J. Kranz (Absurd-Mind, [email protected])
-- Any questions, criticism or praise just drop me an email

local M = {}

-- get the current Pid of awesome
local function getCurrentPid()
    -- get awesome pid from pgrep
    local fpid = io.popen("pgrep -u " .. os.getenv("USER") .. " -o awesome")
    local pid = fpid:read("*n")
    fpid:close()

    -- sanity check
    if pid == nil then
        return -1
    end

    return pid
end

local function getOldPid(filename)
    -- open file
    local pidFile = io.open(filename)
    if pidFile == nil then
        return -1
    end

    -- read number
    local pid = pidFile:read("*n")
    pidFile:close()

    -- sanity check
    if pid <= 0 then
        return -1
    end

    return pid;
end

local function writePid(filename, pid)
    local pidFile = io.open(filename, "w+")
    pidFile:write(pid)
    pidFile:close()
end

local function shallExecute(oldPid, newPid)
    -- simple check if equivalent
    if oldPid == newPid then
        return false
    end

    return true
end

local function getPidFile()
    local host = io.lines("/proc/sys/kernel/hostname")()
    return awful.util.getdir("cache") .. "/awesome." .. host .. ".pid"
end

-- run Once per real awesome start (config reload works)
-- does not cover "pkill awesome && awesome"
function M.run(shellCommand)
    -- check and Execute
    if shallExecute(M.oldPid, M.currentPid) then
        awful.util.spawn_with_shell(shellCommand)
    end
end

M.pidFile = getPidFile()
M.oldPid = getOldPid(M.pidFile)
M.currentPid = getCurrentPid()
writePid(M.pidFile, M.currentPid)

return M

Úselo de esta manera:

local r = require("runonce")

r.run("urxvtd -q -o -f")
r.run("urxvtc")
r.run("urxvtc")
r.run("wmname LG3D")

Respuesta4

Enfoque ArchWiki

Para los usuarios más nuevos, en ArchWiki pueden encontrar que necesitan:

  1. crear ~/.config/awesome/autorun.shy agregar
#!/usr/bin/env bash
function run {
  if ! pgrep -f $1 ;
  then
    $@&
  fi
}

runverifica con el proceso grep (para que no vuelva a ejecutar el proceso) y coloca los contenedores directamente en segundo plano.

En el, ~/.config/awesome.rc.luadígale que genere ese archivo con el shell (bash o lo que haya configurado). Lo haces así (última línea del archivo):

awful.spawn.with_shell("~/.config/awesome/autorun.sh")

Enfoque más simple

Ahora bien, para mí, con muchos argumentos, el pgrep fue un poco exigente. Así que escribí un script más simple, al menos bueno para mi uso. Este es mi autorun.sh:

#!/usr/bin/env bash

feh --bg-scale $(ls ${HOME}/wallpaper/*.png|shuf -n1) &
nm-applet &

información relacionada