我可以重新映射 Caps Lock 键以播放音频吗?

2BF*_*ank 18 sound keyboard capslock

我正在尝试将无用的 Caps 锁定键重新用于 16.04 MATE 上有用的东西。我遇到过

setxkbmap -option ctrl:nocaps
Run Code Online (Sandbox Code Playgroud)

禁用它,但它可以重新映射到播放/暂停 VLC 例如?感谢您的回答!

Seb*_*ark 11

evtest 和 dbus

这是一个涉及在后台运行的小脚本的版本。需要采取几个简单的步骤:

  • 安装evtest程序:sudo apt install evtest. 该程序能够解码和打印来自/dev/input/设备层次结构的原始事件。

  • 将您的用户帐户添加到组中input。注销并重新登录。(这是必需的,因为我们要从 下的某个设备读取/dev/input/,这通常只能由 root 或 group 中的用户完成input。我们可以以 root 身份运行脚本,但是我们必须找到一种方法来告诉它是哪个用户它需要与之交谈的 dbus 实例。)

  • 像您一样禁用大写锁定键或使用相应的 Mate 首选项。如果您像许多人一样将大写锁定键映射到 ctrl,它也会起作用。

  • 将以下脚本存储在某处,例如$HOME/bin/capshack并使其可执行:

    #!/bin/bash
    
    KEYBOARD=/dev/input/by-path/platform-i8042-serio-0-event-kbd
    EVENT="type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 1"
    
    toggleVLC () {
            dbus-send \
                --type=method_call \
                --dest=org.mpris.MediaPlayer2.vlc \
                /org/mpris/MediaPlayer2 \
                org.mpris.MediaPlayer2.Player.PlayPause
    }
    
    evtest "$KEYBOARD" | \
    while read line
    do
        if [[ "$line" == *"$EVENT" ]]
        then
            toggleVLC
        fi
    done
    
    Run Code Online (Sandbox Code Playgroud)

上面的脚本将侦听您的键盘事件并在按下大写锁定键时执行命令。运行的命令使用 dbus 将播放/暂停事件发送到正在运行的 VLC 实例。您可能需要调整KEYBOARD变量以指向您的实际键盘,但上述值很可能会起作用。

如果您希望在释放大写锁定键时调用 toggleVLC() 函数,您可以更改EVENT脚本中的变量,使其以value 0而不是value 1.

此外,对于您来说,capslock 键的键码可能与 58 不同。您可以通过运行来检查这一点evtest,在按下 capslock 时查看输出,并相应地调整 EVENT 变量。您甚至不必通过键码匹配并将 EVENT 简单地设置为(KEY_CAPSLOCK), value 1.

您可以使用triggerhappy 包中的thd 代替 evtest 和上面的脚本(类似thd --dump /dev/input/*会给出类似的输出),但我发现这有点缺乏教育意义。

现在我们创建一个用户 systemd 单元来在后台自动启动脚本:

  • 创建用户 systemd 层次结构: mkdir -p $HOME/.config/systemd/user

  • 将以下文本添加到文件中 $HOME/.config/systemd/user/capshack.service

    [Unit]
    Description=Abuse capslock key
    
    [Service]
    ExecStart=%h/bin/capshack
    
    [Install]
    WantedBy=default.target
    
    Run Code Online (Sandbox Code Playgroud)
  • 启用您刚刚制作的服务单元: systemctl --user enable capshack

  • 启动服务: systemctl --user start capshack

从现在开始,您应该能够使用大写锁定键在 VLC 中切换播放/暂停。登录时应自动启动后台脚本。

触发快乐

如前所述,您也可以使用 triggerhappy 包来执行此操作。对于想要更少地摆弄系统而更喜欢更可靠的解决方案的人来说,这是首选方法。

  • input像上面一样将用户添加到组中

  • 安装软件包: sudo apt install triggerhappy

  • 将 triggerhappy 的配置添加到~/.config/thd/capslock.conf

    KEY_CAPSLOCK    1   dbus-send --type=method_call --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
    
    Run Code Online (Sandbox Code Playgroud)
  • 像这样运行 thd: thd --triggers ~/.config/thd/capslock.conf /dev/input/event*

  • 以类似于已经为 capshack 描述的方式为您的用户运行 thd。

  • 确保您只运行上述方法之一(capshack 或 thd),不要在每次按键时重复切换。

我在 18.04 标准会话和 16.04 伙伴下测试了所有这些。但理论上它也应该在 wayland 或其他桌面环境下工作。


Win*_*nix 8

在 Ubuntu 16.04 中花费数小时谷歌搜索和摆弄后dconf-editorxbindkeys我找到了一个非常简单的解决方案:

  • 2 分钟内快速设置
  • 只需要安装xdotool
  • 无需脚本
  • 大写锁定仍可识别,但不会切换字母大小写
  • 适用于标准的 Ubuntu 键盘自定义快捷键设置

如果您需要 GnomeXF86AudioPlay支持xdotool(按照 OP 的规定,VLC不需要):

sudo apt install xdotool
Run Code Online (Sandbox Code Playgroud)

现在是棘手的部分。每次按下该Caps LocK键在播放和暂停之间切换音乐时,大写字母也会关闭和打开。

使用此方法关闭 Caps Lock 切换,同时仍保持键处于活动状态:

setxkbmap -option caps:none
Run Code Online (Sandbox Code Playgroud)

坚持 Gnome 的音乐播放器

然后在 Ubuntu 16.04 中进入设置 >> 键盘 >> 快捷方式 >> 自定义快捷方式

音频暂停播放快捷方式.png

  • 名称设置为Audio Play
  • 命令设置为xdotool key XF86AudioPlay
  • 然后点击Apply按钮

添加新选项后,指定的快捷键将显示为Disabled。单击禁用,当提示输入键时,按该Caps LocK键。


像 VLC 这样的音乐播放器

按照上一节中 Gnome 的步骤操作,但对于命令,请改用它:

qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
Run Code Online (Sandbox Code Playgroud)

VLC无法识别媒体键:如何使键盘媒体键在全球范围内与 VLC 一起使用?即使内置在键盘中。因此,XF86AudioPlay 的自定义键盘快捷键对于xdotool.


从命令行设置自定义键盘快捷键

此问答讨论了如何从命令行设置自定义键盘快捷键如何从终端设置自定义键盘快捷键?


永久停用大写锁定

下一步是setxkbmap -option caps:none在重新启动后使其持久化。谷歌搜索结果由 Terdon 给出:保存 setxkbdmap 设置

一种简单的方法是将命令添加到您的$HOME/.profile文件中(如果它不存在,您可以创建它):

setxkbmap -option caps:none
Run Code Online (Sandbox Code Playgroud)

这应该让它在你每次登录时运行。

请注意,您应该使用$HOME/.profile而不是$HOME/.bash_profile$HOME/.bashrc或其他一些类似的文件。这是因为此设置应由您的登录管理器读取。