如何在 Awesome 啟動時執行指令?

如何在 Awesome 啟動時執行指令?

如果 Awesome-windowmanager 啟動,我想在登入後執行一些命令。如何將啟動命令加入 Awesome-config 中?

答案1

根據這個ArchLinux 維基你應該只需要添加以下內容到你的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

維基百科也展示了其他幾種實現相同效果的方法。

答案2

我要和右旋糖酐, 迄今為止。

$ 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

讓我們也有一些自動啟動專案:

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

自動啟動專案範例:

$ 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

答案3

很棒的維基建議這樣在重新加載 Awesome 時就會起作用。

將其放入 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

這樣使用它:

local r = require("runonce")

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

答案4

ArchWiki 方法

對於新用戶,在 ArchWiki 中您會發現您需要:

  1. 創建~/.config/awesome/autorun.sh並添加
#!/usr/bin/env bash
function run {
  if ! pgrep -f $1 ;
  then
    $@&
  fi
}

run檢查進程 grep (這樣您就不會重新執行該進程),並將垃圾箱直接放入背景。

告訴~/.config/awesome.rc.lua它使用 shell(bash 或您設定的任何一個)來產生該檔案。你這樣做(文件中的最後一行):

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

更簡單的方法

現在對我來說,有很多參數,pgrep 有點挑剔。所以我寫了一個更簡單、至少適合我使用的腳本。這是我的autorun.sh

#!/usr/bin/env bash

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

相關內容