标签: xkb

Xkb 从哪里得到它的配置?

有没有办法查询从哪里xkb获取配置?在 ArchLinux 下,我有/etc/X11/xorg.conf.d/00-keyboard.conf

Section "InputClass"
    Identifier "system-keyboard"
    MatchIsKeyboard "on"
    Option "XkbLayout" "us,us"
    Option "XkbVariant" "altgr-intl,colemak"
    Option "XKbOptions" "ctrl:nocaps,grp:alt_shift_toggle"
EndSection           
Run Code Online (Sandbox Code Playgroud)

但是当我启动时,如果我这样做setxkbmap -query,我只会得到

rules:      evdev
model:      evdev
layout:     us,us
variant:    altgr-intl,
Run Code Online (Sandbox Code Playgroud)

因此,无论是替代变体还是选项都无法识别(不用说,我无法更改布局)。如果我跑

setxkbmap -layout "us,us" -variant "altgr-intl,colemak" -option "ctrl:nocaps,grp:alt_shift_toggle"
Run Code Online (Sandbox Code Playgroud)

我得到了正确的

rules:      evdev
model:      evdev
layout:     us,us
variant:    altgr-intl,colemak
options:    ctrl:nocaps,grp:alt_shift_toggle
Run Code Online (Sandbox Code Playgroud)

那么是否有可能覆盖我的配置?我正在运行 GNOME/Cinnamon

xorg xkb cinnamon

15
推荐指数
1
解决办法
8360
查看次数

重新映射电源键以删除

我有一台运行 Ubuntu 13.10 和 FluxBox 的 macbook pro。不幸的是,电源按钮实际上位于我希望删除键所在的退格键上方。在 OS X 中,PowerKey 程序可用于重新映射电源键以进行删除。我如何在 X Windows 中做类似的事情?

我通过编辑/etc/systemd/logind.conf和设置禁用了电源键HandlePowerKey = ignore 之后,我可以在不关闭笔记本电脑的情况下按下电源按钮。

运行xev -event keyboard显示电源键的 KeyPress 通常被另一个进程吃掉:

MappingNotify event, serial 36, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

KeymapNotify event, serial 36, synthetic NO, window 0x0,
    keys:  1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0 …
Run Code Online (Sandbox Code Playgroud)

x11 xmodmap xkb keyboard-layout

15
推荐指数
1
解决办法
4303
查看次数

如何从命令行更改当前选定的键盘布局?

我有我的键盘布局(其中两个)并通过以下命令在它们之间切换:

setxkbmap -layout us,ru -option -option "grp:lctrl_lshift_toggle,ctrl:nocaps"
Run Code Online (Sandbox Code Playgroud)

现在我想切换到us布局,使用一些命令行命令。那可能吗?

keyboard x11 xkb keyboard-layout

14
推荐指数
1
解决办法
2万
查看次数

如何重新启用大写锁定键?

我目前正在设置我的默认键盘布局,如下所示:

setxkbmap -layout us -variant dvorak -option ctrl:nocaps,[...]
Run Code Online (Sandbox Code Playgroud)

它禁用大写锁定键,并使其成为一个额外的 ctrl 键,以及大量其他选项。

我想执行以下操作来切换键盘布局:

setxkbmap -layout us -variant dvorak-l -option ctrl:swapcaps
Run Code Online (Sandbox Code Playgroud)

但是,它不会重新启用大写锁定键;就我所见,左控制键和大写锁定都保留为控制键。

我知道我可以清除整个选项列表,但为了可维护性,我宁愿不复制粘贴这些选项。如何重新启用大写锁定?

更新: 查看使用 xev(1) 的按键,似乎 ctrl:nocapsControl_L为两个键都给出了 a ,而 ctrl:swapcaps “恢复”了大写锁定键(按下键给出了Caps_Lock)。但是,大写锁定 LED 不会亮起,实际上也不起作用。

查看xkeyboard-config/symbols/ctrlX.org 源文件中的文件确实暗示了这个问题:

xkb_symbols "nocaps" {
    replace key <CAPS>  {  [ Control_L, Control_L ] };
    modifier_map  Control { <CAPS>, <LCTL> };
};
xkb_symbols "swapcaps" {
    replace key <CAPS>  {  [ Control_L ] };
    replace key <LCTL>  {  [ Caps_Lock ] };
};
Run Code Online (Sandbox Code Playgroud)

后一个选项缺少 …

x11 xmodmap xkb keyboard-layout

13
推荐指数
2
解决办法
7634
查看次数

在 xkb 中重新映射 Caps Lock 和 Shift+Caps Lock

我正在尝试配置 xkb,以便 Caps Lock 映射到 Compose 键,而 Shift+Caps Lock 的功能与传统的 Caps Lock 相同。我将以下内容放在一个名为 的新文件中/usr/share/X11/xkb/symbols/gdwatson

partial modifier keys
xkb_symbols "compose" {
    key <CAPS> {
        type[Group1] = "TWO_LEVEL",
        symbols[Group1] = [ Multi_key, Caps_Lock ]
    };
};
Run Code Online (Sandbox Code Playgroud)

然后我跑了setxkbmap -symbols 'pc+us+gdwatson(compose)',它成功完成了。Caps Lock 用作 Compose,但 Shift+Caps Lock 用作 Compose 而不是 Caps Lock。 xkbcomp :0.0揭示了以下内容:

key <CAPS> {
    type= "TWO_LEVEL",
    symbols[Group1]= [       Multi_key,       Multi_key ]
};
Run Code Online (Sandbox Code Playgroud)

由于某种原因,二级符号映射复制了一级符号,而不是我试图给它的单独值。有没有人有足够强大的 xkb-fu 告诉我我做错了什么或如何解决它?

xkb keyboard-layout

13
推荐指数
1
解决办法
5038
查看次数

如何根据您按住键的时间重新映射键盘键

我想重新映射我的数字键盘上的键,以便它们根据按下键的时间长短而表现不同。下面是一个例子:

如果我按住 Numpad 9 键少于 300 毫秒,它将发送“上一个选项卡”键命令Ctrl+Tab

如果我按住 Numpad 9 键 300-599 毫秒,它将发送“新标签”键命令Ctrl+T

如果我按住 Numpad 9 键 600-899 毫秒,它将发送“关闭选项卡/窗口”键命令Ctrl+W

如果我按住 Numpad 9 键超过 899 毫秒,它不会做任何事情,以防我错过了我想要的时间窗口。

在 Windows 上,我可以使用 AutoHotKey 执行此操作,而在 OS XI 上可以使用 ControllerMate 执行此操作,但是我在 UNIX/Linux 上找不到允许根据键的保持时间重新映射键的工具。

如果您知道可以解决我的问题的工具,请确保提供脚本或代码示例来演示我上面描述的条件键保持持续时间行为。它不需要是解决我的示例的完整代码,但它应该足以让我将其重新用于我的示例。

keyboard-shortcuts x11 xkb keyboard-layout

13
推荐指数
1
解决办法
2488
查看次数

CapsLock 作为应用程序键盘映射的修饰键

我是开发人员,目前我正在使用带有 PyCharm IDE 的 Ubuntu Linux 来开发网站。为了提高打字性能,我考虑将 CapsLock 更改为 Hyper_L 并使用 xmodmap 将其分配给 mod3。在此之后,我想将 'i' 键的 mod3 映射到 'Up'。到目前为止,我所做的是:

xmodmap -e "keysym Caps_Lock = Hyper_L"
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Hyper_L (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
Run Code Online (Sandbox Code Playgroud)

然后我从 mod4 中删除 Hyper_L

xmodmap -e "remove Mod4 = Hyper_L"
Run Code Online (Sandbox Code Playgroud)

之后我尝试将 Hyper_L 分配给 mod3

xmodmap -e …
Run Code Online (Sandbox Code Playgroud)

keyboard x11 xmodmap xkb

12
推荐指数
1
解决办法
4406
查看次数

使用 XKB 声明一个新的修饰键

我正在尝试创建单手键盘布局,并希望Hyper在按下某些键时使用它来生成特殊键。

例如,当我按下Hyper_L和 时B,我希望 XKB 生成XF86AudioRaiseVolume.

相关部分来自custom_2.kbd (完整代码在http://pastebin.com/gm8cggn3):

xkb_keycodes {
    <K_36> = 54;        // b B XF86AudioRaiseVolume
    <K_85> = 133;       // Hyper_L
};

xkb_symbols {
    key <K_36> { type = "HYPER_LEVEL", [ b, B, XF86AudioRaiseVolume ] };
    key <K_85> { type = "ONE_LEVEL", [ Hyper_L ] };
};

xkb_compatibility {
    interpret Hyper_L { action = SetMods(modifiers=Hyper); };
};


xkb_types {
type "HYPER_LEVEL" {
    modifiers= Shift+Hyper;
    map[Shift]= Level2;
    map[Hyper]= Level3;
    map[Shift+Hyper]= …
Run Code Online (Sandbox Code Playgroud)

x11 xkb

12
推荐指数
1
解决办法
3148
查看次数

xkb:使 ctrl+backspace 表现为删除

如何将Ctrl+映射BackspaceDeletexkb?我可以重新映射单个键,/usr/share/X11/xkb/symbols/pc但无法弄清楚如何进行组合。我的操作系统是 Ubuntu 15.04

keyboard-shortcuts keyboard xkb keyboard-layout

12
推荐指数
1
解决办法
3075
查看次数

使用新的(2019)微软人体工学键盘 - 如何将表情符号和办公键映射为可用的东西?

我购买了 \xe2\x80\x9eMicrosoft Ergonomic\xe2\x80\x9d 键盘来替换我用过的 Microsoft Natural。他们将 \xe2\x80\x9eWin\xe2\x80\x9d 键移至左侧,并将新的 \xe2\x80\x9eOffice\xe2\x80\x9d 和 \xe2\x80\x9eEmoji\xe2\x80\x9d 键放在右侧相反:\nAlt、Office、Emoji - 新按键

\n

默认情况下,xorg 似乎无法识别这些键(至少在我使用的 Ubuntu 20.04 上)。

\n

我正在寻找如何映射这些键的提示。我在自定义键盘快捷键中大量使用 Win-\xe2\x80\xa6 组合,因此我反复按这些键)。我更愿意让 Office 键的行为与 Win 的习惯相同(如果我记得的话,超级),并将表情符号映射为一些新的修饰符。

\n

我试过evtest; 它会发出一些组合键。下面的两个报告均来自一次按键。

\n

(办公室)

\n
Event: time 1604935916.773242, -------------- SYN_REPORT ------------\nEvent: time 1604935919.037417, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0\nEvent: time 1604935919.037417, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 1\nEvent: time 1604935919.037417, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e1\nEvent: time 1604935919.037417, type 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 1\nEvent: …
Run Code Online (Sandbox Code Playgroud)

linux xorg keyboard xkb keyboard-layout

12
推荐指数
1
解决办法
1336
查看次数