编辑(修订版 4)
根据这个ubuntuforums.org 帖子,新贵食谱和CameronNemo 的回答,我尝试用
start on login-session-start
我将 conf 文件移至/etc/init/
。脚本现在可运行,但不起作用。日志文件报告Cannot connect to X server
。我尝试将 添加到脚本中
export DISPLAY=":0"
export XAUTHORITY="/home/marco/.Xauthority"
但还不起作用。错误是Invalid MIT-MAGIC-COOKIE-1 key
。
sudo xinput list
注意我登录后运行没有问题。
原始答案
我正在使用 Lubuntu 14.04,如果连接了鼠标,我想在启动时禁用触摸板。为此,我创建了这个~/.config/upstart/touchpad.conf
upstart 作业:
start on desktop-start
script
mouse_state_old=-1
touchpad_id="$(xinput list | grep -i touchpad | grep -oP "\bid\s*=\s*\K\d+")"
while true ; do
mouse_state="$(xinput list | grep -ci mouse)"
if [ "$mouse_state" -ne "$mouse_state_old" ] ; then
if [ "$mouse_state" -gt 0 ] ; then
killall syndaemon
xinput disable "$touchpad_id"
else
xinput enable "$touchpad_id"
syndaemon -m 100 -i 1 -k -d
fi
fi
mouse_state_old="$mouse_state"
sleep 3
done
end script
这项工作有效,但只有在我登录操作系统后才有效。我希望在登录前(登录屏幕上)禁用触摸板。
不再需要的信息,而且完全是错误的信息: 根据食谱,似乎 lightdm 没有发出正确的事件。如果我手动运行
/sbin/initctl -q emit login-session-start DISPLAY_MANAGER=lightdm
调用 upstart 脚本。因此我创建了一个/etc/lightdm/lightdm.conf.d/90-upstart_login.conf
conf 文件,其中包含
[SeatDefaults]
greeter-setup-script=/home/marco/.local/usr/bin/all/upstart_login.sh
和/home/marco/.local/usr/bin/all/upstart_login.sh
脚本
#!/bin/sh
/sbin/initctl -q emit login-session-start DISPLAY_MANAGER=lightdm
如果从 bash 手动调用它可以工作,但在启动时则不行。
我有 lightdm 版本 1.10.1-0ubuntu1,所以它应该发出事件。
答案1
您混淆了系统和会话作业和事件。lightdm
可以正常发出事件,但针对的是 Upstart 的系统实例。 将您的复制~/.config/upstart/touchpad.conf
到/etc/init/
并将事件更改start on
为login-session-start
。
答案2
除了使用 Upstart,您还可以尝试将脚本片段放入/etc/X11/session.d/
。
确保它的名称是 99local,并且才不是有#!bin/sh
標題。
它也不应该是可执行的。
这将确保您的脚本在 xsession 设置之后运行并且始终运行,因为该目录中的脚本始终在 X 服务器启动时运行。