在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
随着一个桌面环境启动的同时启动一些必备的程序。诸如:输入法之类。很多地方这种实现叫做autostart,我也觉的很贴切。 aweome的wiki里有一段关于autostart纯lua实现的代码片段,为了简洁和便于使用,我将其改成了模块,添加了新的使用接口。 并添加到rc.lua require("autostart") autostart.run_once_list{ "wmname LG3D", "fcitx", "clipit", "lanuchy", "guake -e ranger", "batti", "firefox", "amule", }
下面是修改成模块的autostart.lua,放在~/.config/awesome/下面 基本的原理是遍历/proc下表示一个个进程目录,通过每个进程目录下cmdline去判断想要的程序是否已经启动,没有则执行相应的启动命令 这段程序涉及到不少lua的基础知识,简单总结下:
另外:lfs模块需要安装luafilesystem获得
require("lfs") module("autostart",package.seeall) -- {{{ Run programm once function processwalker() local function yieldprocess() for dir in lfs.dir("/proc") do -- All directories in /proc containing a number, represent a process if tonumber(dir) ~= nil then local f, err = io.open("/proc/"..dir.."/cmdline") if f then local cmdline = f:read("*all") f:close() if cmdline ~= "" then coroutine.yield(cmdline) end end end end end return coroutine.wrap(yieldprocess) end function run_once(process, cmd) assert(type(process) == "string") local regex_killer = { ["+"] = "%+", ["-"] = "%-", ["*"] = "%*", ["?"] = "%?" } for p in processwalker() do if p:find(process:gsub("[-+?*]", regex_killer)) then return end end return awful.util.spawn_with_shell(cmd or process) end function run_once_list(list) parse(list,run_once) end function parse(list,fn) for k,v in ipairs(list)do if type(v) == "string" then v={v} end fn(unpack(v)) end end -- -- Use the second argument, if the programm you wanna start, -- differs from the what you want to search. --run_once("redshift", "nice -n19 redshift -l 51:14 -t 5700:4500")
|
请发表评论