如何在桌面锁定时允许关键功能

如何在桌面锁定时允许关键功能

是否可以在桌面锁定时让键盘的音量键继续工作?目前,默认行为是禁用所有特殊功能键,直到桌面解锁。我喜欢将 PC 用作音乐播放器,当我不在控制台旁时,我会将其锁定,但如果歌曲声音太大,我仍然希望让人们控制音量。

答案1

有点丢脸,但由于似乎没有任何现有的解决方案,而且任务看起来相对简单,所以我写了一个简单的 Python 守护进程来修复这个问题。它使用 python-xlib API 来捕获系统范围内的按键,然后运行自定义 shell 命令。它假设有一个基本的 Debian/Ubuntu 设置,但经过一些调整后可能可以在大多数 Linux 系统上运行。

就我的情况而言,音量增大/减小键映射到代码 122/123,因此降低或提高音量的相应命令仅当桌面被锁定时是:

gnome-screensaver-command -q | grep "is active" && bash -c '/usr/bin/pactl -- set-sink-volume `pacmd list-sinks | grep -P -o "(?<=\* index: )[0-9]+"` -10%'
gnome-screensaver-command -q | grep "is active" && bash -c '/usr/bin/pactl -- set-sink-volume `pacmd list-sinks | grep -P -o "(?<=\* index: )[0-9]+"` +10%'

不可否认,这有点冗长。第二个 grep 是在可能具有多个声音接口的系统上查找活动声音接口(例如,我的笔记本电脑有一个主接口和一个耳机接口,允许这些命令控制其中任何一个)。

编辑:从 Ubuntu 16 开始,此功能不再起作用。一旦屏幕锁定,所有 X 功能似乎都会被禁用,即使是从终端也是如此。

答案2

我编写了这个脚本,该脚本在 Ubuntu 18.04 上有效:

#!/bin/bash

EVFILE=/dev/input/event3
USR=flurl


evtest $EVFILE \
    | grep --line-buffered -E "KEY_MUTE|KEY_VOLUMEDOWN|KEY_VOLUMEUP" \
    | grep --line-buffered "value 1" \
    | stdbuf -oL awk -F '[()]' '{print $4}' \
    | while read KEY; do
        if [ "$KEY" = "KEY_MUTE" ]; then
            su - $USR -c "amixer -D pulse sset Master +1 toggle"
        elif [ "$KEY" = "KEY_VOLUMEUP" ]; then
            su - $USR -c "amixer -D pulse sset Master 5%+"
        elif [ "$KEY" = "KEY_VOLUMEDOWN" ]; then
            su - $USR -c "amixer -D pulse sset Master 5%-"
        fi  
      done

您必须以 root 身份运行它并调整变量EVFILEUSR

相关内容