停止在锁定屏幕上按下 Enter 键,以便桌面上的焦点应用程序接收该键

停止在锁定屏幕上按下 Enter 键,以便桌面上的焦点应用程序接收该键

当我的屏幕被锁定(例如由于不活动或按Super+ L)并且我通过输入密码并按 来解锁时Enter,现在已解锁的桌面上的焦点应用程序也会收到最后的击键。

例如,如果我打开浏览器并且正在 Ask Ubuntu 上编辑评论,然后按照说明快速锁定和解锁屏幕,则评论会在解锁后立即发送,而这并不是我想要的。

通过监控我的按键来测试行为xev,似乎如果我Enter非常快速地按下来解锁屏幕,桌面上不会接收到它。但是,这个“非常快速”很难实现和记住。

是否可以以某种方式添加延迟,例如在锁定屏幕上,以便它保持启用状态 100ms 左右或直到按键Enter被释放?或者还有其他方法可以阻止此键盘事件通过?

答案1

创建dbus监控脚本Ubuntu 16.04

您可以创建此脚本,在屏幕解锁后由 dbus 调用。从您的启动应用程序并且它将一直运行。

#!/bin/bash
dbus-monitor --session "type=signal,interface=com.canonical.Unity.Session,member=Unlocked" | 
  while read MSG; do
    LOCK_STAT=`echo $MSG | awk '{print $NF}'`
    if [[ "$LOCK_STAT" == "member=Unlocked" ]]; then
        logger "Screen unlocked"
        # Flush keyboard buffer
        while read -e -t 1; do : ; done.
    fi
  done

注意:这是针对 Ubuntu 16.04 下的 Unity。Ubuntu 14.04 及更早版本有不同的方法。不同的桌面环境也可能有不同的方法。

该代码适用于其他实用程序,但该#Flush keyboard buffer部分是新的且未经测试。

相关内容