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程序: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 或其他桌面环境下工作。
在 Ubuntu 16.04 中花费数小时谷歌搜索和摆弄后dconf-editor
,xbindkeys
我找到了一个非常简单的解决方案:
如果您需要 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)
然后在 Ubuntu 16.04 中进入设置 >> 键盘 >> 快捷方式 >> 自定义快捷方式:
Audio Play
xdotool key XF86AudioPlay
添加新选项后,指定的快捷键将显示为Disabled。单击禁用,当提示输入键时,按该Caps LocK键。
按照上一节中 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
或其他一些类似的文件。这是因为此设置应由您的登录管理器读取。
归档时间: |
|
查看次数: |
1417 次 |
最近记录: |