如何在锁定屏幕输入密码时运行脚本?

如何在锁定屏幕输入密码时运行脚本?

为了根据连接的 USB 鼠标切换启用/禁用笔记本电脑的触摸板,我使用了 touchpad-indicator,它运行一个守护进程来监控连接的设备并采取适当的措施。当我让笔记本电脑进入睡眠状态,然后拔下鼠标时,在唤醒时,触摸板被禁用,所以我必须连接-断开鼠标才能启用它!我在这个论坛上搜索了这个问题,发现两个解决方案(在/etc/pm/sleep.d或中添加脚本/usr/lib/pm-utils/sleep.d)都不起作用!我提出了一个问题来解决它,但毕竟,即使使用 udev 的规则而不是触摸板指示器重新工作,问题仍然存在!

我想澄清一下:如果触摸板在系统级别被禁用(即在登录之前就被禁用,并且脚本会位于rc.local,但是,我尝试过,但没有用),将脚本放在 /etc/pm 和 usr/lib/pm-utils 中可能会有用

但它在会话级别或 udev 适用的任何级别上都被禁用。您能告诉我将输入密码时运行的脚本放在哪里吗?未登录,但输入密码例如醒来后。

更新:@terdon 您不太明白。我甚至没有启用 xscreensaver,我怀疑它是否已安装。您看,因为我的帐户有密码,如果我按“注销”或“更改用户”或睡眠模式,之后我将必须输入密码,这与 xscreensaver 或我没有的任何屏幕保护程序无关。

在提出这个问题之前,我尝试了你所建议的方法,但没有成功。

更新 2:好的,经过一番调查,我发现这是一个 Lubuntu 特有的问题。我现在正在努力“与 lightdm 交朋友”(我猜这在某种程度上适用其他比 udev) 和 udev。任何有 lighdm 经验的人都会受到赞赏。

更新 3:感谢Ubuntu 维基我(正确地?)弄清楚了将脚本调用放在哪里。所以我添加了session-setup-script=/home/n76/tptoggle.sh当前/etc/lightdm/lightdm.conf 情况与开始时相同,只是 lightdm实际上是在尝试在用户会话开始时打开触摸板

问题还没有消失,但我觉得我已经接近了,只需要赋予 lightdm 正确的权限。

请建议如何做。

答案1

我不知道是否有办法按照您的要求在输入密码后运行程序,而且我怀疑是否有办法,因为这是由桌面环境(可能是屏幕保护程序守护程序)处理的。但是,如果您将正确的脚本添加到,它应该可以完美运行/etc/pm/sleep.d。由于您没有显示您尝试过的脚本,我猜您只是没有正确编写脚本。以下在我的系统上运行良好:

  1. 创建一个名为的文件,/etc/pm/sleep.d/20_resume其内容如下:

    #!/bin/sh
    
    case "$1" in
        thaw|resume)
        /home/terdon/scripts/onoff.sh
        ;;
    esac
    exit $?
    

    确保将上面的路径(/home/terdon/scripts/onoff.sh)调整为步骤 3 中显示的脚本的实际路径。

  2. 授予文件正确的权限(rwxr-xr-x

    sudo chmod 755 /etc/pm/sleep.d/20_resume
    
  3. 编写一个脚本,当连接了鼠标时关闭触摸板,当没有连接鼠标时打开触摸板:

    #!/bin/sh
    
    ## Get the xinput ID of the touchpad
    TID=$(xinput list | grep -iPo 'touchpad.*id=\K\d+')
    
    ## Check if a mouse is connected and act accordingly
    xinput list | grep -iq mouse &&  xinput disable "$TID" || xinput enable "$TID" 
    

    现在使用步骤 1 中的路径和名称保存上述脚本(在此示例中为/home/terdon/scripts/onoff.sh),使其可执行(chmod +x /home/terdon/scripts/onoff.sh),然后您就设置好了。

如果您已经尝试过,请编辑您的问题并向我们展示您使用过的脚本。


我能想到的另一种方法是使用我回答你的另一个问题。我不明白你为什么反对循环,它们是一种完全有效且确实非常有价值的编程结构。我能想到的唯一问题是运行无限循环会加重你的 CPU 负担,但如果你的脚本习惯在sleep每次循环运行之间等待一两秒钟,那应该不是问题。由于我的建议就是这样的,如果上述方法失败,你可以简单地使用它。

相关内容