Linux System Info:
OS: GNU/Linux x86_64
Kernel: 3.13.0-24-generic
Distro: Linux Mint 17 Qiana, Cinnamon 64-bit 2.2.16
[Based On: Ubuntu 14.04.5 LTS, Trusty Tahr]
Run Code Online (Sandbox Code Playgroud)
由于包括手指损伤在内的残疾(脊椎损伤),我进行了一些改动,以便可以将键盘的 CapsLock 键用作鼠标左键。NumLock 被重新映射为 CapsLock。
当使用 CapsLock 作为左键单击和左键双击时,几乎一切正常,但下面列出的一些事情不...
编辑 2019-01-10
一篇长文章的其余部分已被删除 - 请参阅下面我的回答,了解如何将 CapsLock 键设置为鼠标左键,并将 NumLock 重新映射为 CapsLock。
是否可以将(全局)按键绑定到某个命令并且仍然不会中断按键完成?我的意思是,如果我尝试在此处其他地方发布的 bindkey 解决方案:
# In file: ~/.xbindkeysrc
# Bind key 'q' to running 'some_command'
"some_command"
q
Run Code Online (Sandbox Code Playgroud)
然后按键'q'永远不会完成,因为它会做:即,永远不会在终端上打印字符'q',例如。
利用xdotool发送“Q”按键是这样的:
# In file: ~/.xbindkeysrc
# Bind key 'q' to running 'some_command'
"some_command && xdotool key q"
q
Run Code Online (Sandbox Code Playgroud)
导致循环,因为执行的“q”键xdotool将通过绑定执行另一个“some_command”。
更清楚一点,我希望按键“q”像往常一样执行,另外还执行一些外部命令。上面的解决方案用执行一些外部命令替换了 'q' 按键事件。问题是,如果该外部命令也模拟了“q”键按下,那么绑定会重新启动外部命令,我就会陷入无限循环。
我有一个通过 USB 连接的数字键盘,我的目标是能够重新映射该数字键盘上的按键,以便它们可以运行自定义命令或映射到其他按键组合。
我的文件中有这个.xbindkeysrc:
~ $ cat .xbindkeysrc
"xte 'keydown Super_L' 'key Left' 'keyup Super_L'"
m:0x10 + c:79 + Release
Mod2 + KP_Home
Run Code Online (Sandbox Code Playgroud)
这会将 NUM 7 键(通常打印 7)重新映射到Super_L + Left Arrow。这很棒并且有效,但适用于所有键盘,而我的目标是使其仅适用于数字键盘。
一直在寻找如何做到这一点,但我得到的最接近的是使用xinput set-button-map. 不幸的是,这似乎只适用于鼠标等设备。我喜欢尝试获取数字键盘的按钮映射xinput get-button-map [device id],但它只打印从 1 到 7 的数字,而且我的键盘上肯定有更多按钮,所以它不一定有意义。
有什么建议吗?
我有一个 Acrobat 阅读器,它不会在 Control+plus 上放大,而是在 Control+acute 上放大(Control-plus 会烦人地旋转文档)。
我想使用 xbindkeys 和 xdotool 解决这个问题,但复杂的是 Control-plus 也被其他应用程序使用。
所以思路是拦截Control-plus,检查Acrobat是否为活动窗口。如果是,则向 Acrobat 发送 Control-acute,否则发送 Control-plus。
这是我目前对 xbindkeys 在 Control+plus 上启动的脚本的尝试:
WM_CLASS=$(xprop -id `xdotool getactivewindow` WM_CLASS |awk '{print $4}')
if [ "$WM_CLASS" = "\"Acroread"\" ];
then
sleep 0.1s;
xdotool key --clearmodifiers ctrl+acute
else
killall xbindkeys
xdotool key --clearmodifiers ctrl+plus
xbindkeys
fi
Run Code Online (Sandbox Code Playgroud)
这实际上有效,但问题是如果我不杀死 xbindkeys,那么 xdotool 发送 ctrl-plus 将再次触发 xbindkeys 等等。
但这当然意味着每次我在非 acrobat 窗口中点击 Control+plus 时,xbindkeys 都需要被杀死并重新启动......
有一个更好的方法吗?
非常感谢!
我正在尝试使用 xbindkeys 插入“?” 带有键盘快捷键的字符。以下不起作用:
"xvkbd -xsendevent -text '?'"
control + shift + 3
相反,它发送“â”。
我知道互联网上有很多关于在 Linux 中设置键盘/鼠标多媒体键/按钮的问题,但我的问题更具体。
我的无线输入设备:
上述键盘有ia:
工作正常的按键。我的鼠标有几个多媒体按钮,没有分配任何操作。我想分配给两个鼠标按钮,相同的操作,它们分配给音量增大/减小键盘键。
重要的提示:
当我按住音量增大/减小键盘键时,音量 逐渐变大/变小,直到音量达到最大/静音。我想要用鼠标达到同样的效果。
为了满足上述要求,我遵循了以下步骤:
xvkbd,这是X窗口系统的虚拟键盘,xev鼠标按钮的代码(8- 音量减小,9- 音量增大),我添加了以下几行~/.xbindkeysrc:
"xvkbd -text '\[XF86AudioLowerVolume]'"
b:8
"xvkbd -text '\[XF86AudioRaiseVolume]'"
b:9
Run Code Online (Sandbox Code Playgroud)我残酷地“重装”了xbindkeys守护进程(其实我不知道它是否可以称为守护进程,因为它是从 开始的/etc/xdg/autostart):
pkill -f xbindkeys && xbindkeys
Run Code Online (Sandbox Code Playgroud)
顺便说一句:我不知道如何优雅地重新加载它。
它几乎可以工作了。现在我可以用鼠标按钮调高/调低音量,但如果我继续按住音量调高/调低按钮,音量不会逐渐变大/变小。它在一次“迭代”后停止。只要按住按钮,我就想要“自动重复”。
问题:
为了完整起见:
xmodmap结果:
abc@xyz:~$ xmodmap -pke | grep …Run Code Online (Sandbox Code Playgroud)我的.xbindkeysrc文件包括:
"amixer sset -q 'Master' 10%+"
control + shift + b:4
"amixer sset -q 'Master' 10%-"
control + shift + b:5
Run Code Online (Sandbox Code Playgroud)
Ctrl这使我可以使用+ Shift+鼠标滚轮控制音量。在最近升级之前,这一切都工作得很好。
目前这是可行的,但它也会将Ctrl+ Wheel传递到底层窗口 - 这通常会导致放大/缩小(例如在浏览器或终结者中)。
如何在不缩放的情况下更改音量?:-)
我正在使用 arch linux 和 gnome 以及 xorg。
更新:使用sxhkd时也会发生同样的情况。
(2022-02,更新版本,问题依然存在)
题:
我正在使用 i3-wm 并且我将 Mod3 用作热键。我有以下内容./config/i3/config:
#This command works
bindsym Mod3+f exec "firefox"
#This doesn't work nor do my other scripts
bindsym Mod3+w exec "openBrowser"
Run Code Online (Sandbox Code Playgroud)
当我从 bash 运行它们时,这两个命令都可以正常工作,但只有“firefox”命令使用热键运行。运行我自己的脚本不起作用。
额外细节:
openBrowser 是一个脚本,/opt/bin/在我的路径中。还尝试做:
#This command works
bindsym Mod3+f exec /opt/bin/openBrowser
Run Code Online (Sandbox Code Playgroud)
我还尝试了其他脚本,但在 i3 调用时这些脚本都不起作用。因此,我确定这不是脚本的问题。
我还注意到,当我在 bash 中时,如果我执行 Mod3+w,我的光标会闪烁,就像我执行 Mod3+[any unset key] 一样,该键会将其值写入屏幕。所以看来 i3 至少正在尝试运行该功能。
按下某个键时如何连续运行多个命令?例如,
"Command 1"
"Command 2"
"Command 3"
Hotkey
Run Code Online (Sandbox Code Playgroud)
似乎不起作用。