- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
问题
我在我的应用程序中使用 xdotool keydown Control
和 xdotool keyup Control
来模拟 Ctrl 按下。当布局设置为 us
时,一切正常,但当布局更改为其他内容(fr
或 ru
)时,应用程序将停止看到 ctrl 事件.
问题
为什么会这样?我该怎么做才能使 ctrl 键操作在布局中统一工作?
一些信息
我用来设置布局的命令:
setxkbmap -layout us,fr -option -option "grp:lctrl_lshift_toggle,ctrl:nocaps"
使用 us
布局的 xev 输出:
KeyPress event, serial 25, synthetic NO, window 0x4a00001,
root 0x5c, subw 0x0, time 11278564, (317,709), root:(1279,736),
state 0x10, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 28, synthetic NO, window 0x4a00001,
root 0x5c, subw 0x0, time 11278676, (317,709), root:(1279,736),
state 0x14, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
使用 fr
布局的 xev 输出:
KeyPress event, serial 109, synthetic NO, window 0x4a00001,
root 0x5c, subw 0x0, time 11343218, (312,520), root:(1274,547),
state 0x2010, keycode 8 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
MappingNotify event, serial 109, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 109, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 109, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 109, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 109, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 109, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 109, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 116, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 116, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 116, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 116, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 116, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 116, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 116, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
KeyRelease event, serial 123, synthetic NO, window 0x4a00001,
root 0x5c, subw 0x0, time 11343460, (312,520), root:(1274,547),
state 0x2010, keycode 8 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
MappingNotify event, serial 123, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 123, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 123, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 123, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 123, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 123, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
MappingNotify event, serial 123, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 1
setxkbmap 的详细输出:
Setting verbose level to 10
locale is C
Applied rules from evdev:
rules: evdev
model: pc105
layout: us,fr
options: grp:lctrl_lshift_toggle,ctrl:nocaps
Trying to build keymap using the following components:
keycodes: evdev+aliases(qwerty)
types: complete
compat: complete
symbols: pc+us+fr:2+inet(evdev)+group(lctrl_lshift_toggle)+ctrl(nocaps)
geometry: pc(pc105)
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+fr:2+inet(evdev)+group(lctrl_lshift_toggle)+ctrl(nocaps)" };
xkb_geometry { include "pc(pc105)" };
};
用于控制的 xmodmap 输出:
$ xmodmap -pme | grep -i control
control Control_L (0x25), Control_L (0x42), Control_R (0x69)
$ xmodmap -pke | grep -i control
keycode 37 = Control_L Control_L Control_L Control_L
keycode 66 = Control_L Control_L Control_L Control_L
keycode 105 = Control_R NoSymbol Control_R
最佳答案
正如您从 xev
输出中看到的,当处于 us 模式时,Control_L按下键相当于键码 37,状态从 0x10 移动到0x14,而在 fr 模式下,您的键码为 8 且状态为 0x2010 不是变化,以及几个 MappingNotify 事件。
state 是当前应用修饰符的位图,例如 shift,控制,Alt 等。它们可以显示为
xmodmap -pme
例如对我来说(在完全不同的键盘设置上)目前是
shift Shift_L (0x32), Shift_R (0x3e)
lock
control Control_L (0x25), Control_L (0x42), Control_R (0x69)
mod1 Meta_R (0x86)
mod2 Num_Lock (0x4d)
mod3
mod4
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
这些列出了 state 中的 8 位位置,其中:
您的状态 0x2010 包括超过这 8 位的值 0x2000,这就是 2 个键映射合二为一的实现方式,并在您处于 fr 模式时显示。
如果我们看一下 xdotool
的工作原理,当您处于状态 0x2000 所示的第二个键映射时,它会查找 Control_L 以找到键码,然后在 中查找键码>xmodmap -pke
当前状态的列,但未找到 Control_L。所以它需要一个备用键码 8,并临时更改映射,使键码 8 = keysym Control_L,然后发送该键事件。不幸的是,此键码不在控制位的修饰符映射中。
因此,如果您更改键码 37 的映射,以便所有列都具有 Control_L,那么也许会起作用。我不知道你有多少列,但是 xmodmap -pke | grep 'keycode 37'
并计算它们,然后将它们全部更改 eg:
xmodmap -e 'keycode 37 = Control_L Control_L Control_L Control_L'
如评论中所述,xdotool key
可以采用键码十进制数而不是 keysym 参数。手册页中没有提到这一点。
关于linux - xdotool、ctrl 键和键盘布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31940669/
我需要 xdotool 来按 pos1,但我不知道这个键的名称。这不是 pos1,POS1,Pos1,开始。如何找到 xdotool 使用的 key 名称? 最佳答案 执行 $ xev -event
我一直在使用xdotool type过去只是在快捷方式上使用 xdotool type '¯\_(ツ)_/¯' .这可行,但总是需要相当长的时间,并导致整个桌面卡住(完全,不仅仅是输入)几秒钟。不过并
我正在编写一个 bash 脚本来远程控制浏览器。到目前为止,我已经使用 实现了垂直滚动 xdotool click 4 //up xdotool click 5 //down 我如何使用 xdotoo
问题 我正在尝试: xdotool type 'date;' 但不是预期的 date; 我得到: dateq 我有一个希腊语键盘,但当我发出命令时,语言设置为美国。注意:使用希腊语时,键盘的“q”键用
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我只是启动 gedit 并尝试使用 xdotool 找到 gedit 窗口 xdotool 搜索“gedit” 有时它会给我一个窗口 ID,有时它会失败并显示 X Error of failed re
我一直在制作一个脚本,它使您无法退出终端,除非您输入"is"。我已使用此命令暂时禁用 Alt 键。 xdotool keyup Alt_L Alt_R 我现在无法“释放”该键,并且我的 Alt 键不再
我正在尝试使用 XDOTool 将一个简单的无限点击脚本与另一段脚本集成以检测键盘输入;在按下某个键但不确定如何匹配它们时结束正在运行的点击脚本。 此脚本无限重复点击屏幕光标点 XXX,XDOTool
我正在使用 xdotool 来自动运行命令、打开新标签等。 问题是在当前窗口执行此操作时,我必须专门休眠一段时间或在执行任何操作之前使用 xdotool keyup Return 否则 xdotool
我正在编写一个脚本来自动准备工作环境。我需要打开 4 个终端窗口,排列它们并在每个窗口中执行命令。 它有效,但有时我遇到严重的失败 - xdotool type 随机重复一些字符: rvm use r
我每天都在编写一个小脚本来保存一些来自互联网的数据。所以我使用 xdotool 来模拟我所有的导航,直到我面前有 firefox 的保存窗口,我的意思是,在我的脚本前面。好吧,直到这里...但是,当我
您好,我正在尝试刷新我的桌面,使用 xdotool 模拟“F5”/“ctrl+R”按键。 我试过 xdotool key F5 但我得到了 ^[[15~jake@jake-PC ~ $ ~ 按下回车后
我是 crontab 的新手,我一直在尝试获得一个简单的 cron 作业。我想每 1 分钟按 F5 刷新 Mozzila Firefox。我正在使用 xdotool 按 F5。我有脚本 /usr/lo
问题 我在我的应用程序中使用 xdotool keydown Control 和 xdotool keyup Control 来模拟 Ctrl 按下。当布局设置为 us 时,一切正常,但当布局更改为其
我正在寻找使用 xdotool 模拟键盘,但我遇到了部分 URL 问题。我要输入的部分是“-episode-”。 作为解决方案,我有一个文本文件 (hyphen.txt),其中包含: - 然后我运行:
是否可以在 linux 中同时模拟击键(“N”)和鼠标点击? 我在 fedora linux 发行版上使用 xdotool 我没有找到任何与这种可能性相关的东西 稍后编辑: 我发现了以下解决方法。我发
我想让 xdotool 检测右键单击是否在特定窗口上(我可以毫无问题地捕获窗口 ID),然后运行适当的 shell 命令/函数,如果单击是在所需的窗口上。 实际上,这意味着我希望 xdotool 获取
我想通过 SSH 使用 xdotool 但收到以下错误: Error: Can't open display: (default) 我找到了这个解决方案: export DISPLAY='0:0' 仍
我正在尝试编写一个 bash 脚本来自动运行一些命令。然而,其中一些命令应该在它们自己的终端选项卡中运行。所以我在我的 bash 脚本中使用以下命令打开一个新选项卡: xdotool key ctrl
我正在尝试自动测试 selenium 会花费太长时间的表单(javascript 繁重的现代表单),我想使用 xdotool 并获取窗口 ID。我看到您可以调用 xdotool selectwindo
我是一名优秀的程序员,十分优秀!