keyboard - 为什么某些 setxkbmap 选项被忽略?

标签 keyboard xorg nixos

在share/X11/xkb/rules/evdev/lst中,我找到了这组ctrl选项

  ctrl                 Ctrl key position
  ctrl:nocaps          Caps Lock as Ctrl
  ctrl:lctrl_meta      Left Ctrl as Meta
  ctrl:swapcaps        Swap Ctrl and Caps Lock
  ctrl:ac_ctrl         At left of 'A'
  ctrl:aa_ctrl         At bottom left
  ctrl:rctrl_ralt      Right Ctrl as Right Alt
  ctrl:menu_rctrl      Menu as Right Ctrl
  ctrl:ctrl_ralt       Right Alt as Right Ctrl
  ctrl:swap_lalt_lctl  Swap Left Alt key with Left Ctrl key
  ctrl:swap_lwin_lctl  Swap Left Win key with Left Ctrl key
  ctrl:swap_lalt_lctl_lwin Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt

其中一些有效 - 如果我运行 setxkbmap -option -option 'ctrl:nocaps',我会得到正确的行为。但是,其他一些会被忽略,例如 setxkbmap -option -option 'ctrl:swap_lalt_lctl_lwin'

我的一个观察结果是,被忽略的选项是由 setxkbmap -query 显示的,而不是由 setxkbmap -print 显示的。这是此行为的演示。

$ setxkbmap -option -option ctrl:nocaps
$ setxkbmap -query
rules:      evdev
model:      pc104
layout:     us
variant:    colemak
options:    ctrl:nocaps
$ setxkbmap -print
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us(colemak)+inet(evdev)+ctrl(nocaps)"   };
    xkb_geometry  { include "pc(pc104)" };
};
$ setxkbmap -option -option ctrl:swap_lalt_lctl_lwin
$ setxkbmap -query                                  
rules:      evdev
model:      pc104
layout:     us
variant:    colemak
options:    ctrl:swap_lalt_lctl_lwin
$ setxkbmap -print                                  
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us(colemak)+inet(evdev)"    };
    xkb_geometry  { include "pc(pc104)" };
};

我不知道如何更深入地研究这个问题。一些进一步的环境信息是

  • Linux 发行版是 NixOs
  • 窗口管理器是 XMonad,显示管理器是 SLiM,没有桌面管理器
  • 键盘布局为 colemak(如果我切换到 qwerty,问题仍然存在)
  • 根据手册页,setxkbmap 版本为 1.3.0

最佳答案

这似乎是因为并非文件 evdev.lst 中列出的所有选项也在相邻文件 evdev 中。我在 why does the file evdev in /usr/share/X11/xkb/rules not match with evdev.lst? 上问了一个关于为什么会出现这种情况的问题

关于keyboard - 为什么某些 setxkbmap 选项被忽略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26661743/

相关文章:

linux - 放弃 X 会完全伤害吗?

linux - 删除了 '/bin/tempfile' ,现在 X 出现问题

python - 使用 Python 作为界面时的奇怪控件

android - 如何在屏幕底部创建一个不是矩形的屏幕安卓键盘?

c - 通过 C 指针访问 Linux 键盘

purescript - 在NixOS上开始使用purescript时需要帮助

nix - 从 Nix 表达式语言中的另一个集合继承属性

wpf - 在 WPF 中,如何确定按下的键是否是输入键(是否打印某些内容)?

c - 使用 XCB 的奇怪递归行为

haskell - 配置堆栈 ghci 提示符