编辑(修订版 4)

编辑(修订版 4)

编辑(修订版 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.confupstart 作业:

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.confconf 文件,其中包含

[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 onlogin-session-start

答案2

除了使用 Upstart,您还可以尝试将脚本片段放入/etc/X11/session.d/

确保它的名称是 99local,并且才不是#!bin/sh標題。

它也不应该是可执行的。

这将确保您的脚本在 xsession 设置之后运行并且始终运行,因为该目录中的脚本始终在 X 服务器启动时运行。

相关内容