键盘布局选项中没有这样的选项,这很遗憾。
我怎样才能手动完成?
答案1
要手动执行此操作,您需要在主目录中创建一个名为 .Xmodmap 的文件。您可以使用终端中的命令执行此操作
~$ gedit ~/.Xmodmap
这将创建文件并在 gedit 中打开它。将以下行添加到文件中:
clear control
clear mod1
keycode 37 = Alt_L Meta_L
keycode 64 = Control_L
add control = Control_L Control_R
add mod1 = Alt_L Meta_L
保存文件并退出 gedit。下次登录时,新的键映射将生效。要使设置立即生效,请运行以下命令:
~$ xmodmap ~/.Xmodmap
上述密钥代码可能与您的计算机上的密钥代码不同。如果上述方法无效,请尝试运行軍从命令行运行程序。Xev 将在屏幕角落生成一个新的小窗口。如果您开始按下键盘上的按键,您将获得该按键的所有按键映射信息。
~$ xev
例如,如果我在 xev 运行时按“q”,我会得到以下输出:
KeyRelease event, serial 33, synthetic NO, window 0x4c00001,
root 0xb6, subw 0x0, time 9127480, (21,-17), root:(22,36),
state 0x0, keycode 24 (keysym 0x71, q), same_screen YES,
XLookupString gives 1 bytes: (71) "q"
XFilterEvent returns: False
密钥代码 24就是我们想要的信息。运行 xev 时按下左 Ctrl 和左 Alt 键以获取各自的键码,以确认它们与上面使用的键码相同。
希望有所帮助。
答案2
如果你不想陷入痛苦之中xmodmap
,你也可以通过 Gnome 设置来实现:
- 安装
gnome-tweaks
sudo apt-get install gnome-tweaks
- 打开它
- 去键盘和鼠标->附加布局选项
- 更改控制位置选择交换左 Alt 键和左 Ctrl 键:
您可能也可以通过 来执行此操作gsettings
,但不确定确切的配置条目名称。
答案3
只需使用简单的文本编辑器创建 ~/.Xmodmap 并重新启动 Xserver。
!
! based on: http://www.emacswiki.org/emacs/SwapControlAltAndCapsLock#toc8
!
!----------------------------------------------------------
! Swap Control and Alt keys, both sides
!----------------------------------------------------------
! First clear all modifiers & control
clear control
clear mod1
clear mod4
! Swap Control_L and Alt_L
keycode 64 = Control_L
keycode 37 = Alt_L Meta_L
! Menu becomes Alt_R Meta_R (AltGr)
keycode 135 = Alt_R Meta_R
! Define Control_R and Alt_R similar to Control_L and Alt_L
keycode 108 = Control_L
keycode 105 = Alt_L Meta_L
! We need to set keycodes first, as some programs (emacs!) read
! the key names and seem to ignore what's below.
add mod1 = Alt_L Alt_R Meta_L Meta_R
add mod4 = Super_L Super_R
add control = Control_L Control_R
!------------------------------------------
! Caps_Lock becomes an additional BackSpace
!------------------------------------------
remove lock = Caps_Lock
keysym Caps_Lock = BackSpace
答案4
您可以通过创建udev .hwdb
文件手动将扫描码映射到键码。此方法适用于 Wayland、Xorg 和虚拟控制台。
结论
通用输入设备(USB 键盘),
echo 'evdev:input:b0003v*p*
KEYBOARD_KEY_700e0=leftalt
KEYBOARD_KEY_700e2=leftctrl' |\
sudo tee /etc/udev/hwdb.d/70-keyboard.hwdb &&\
sudo systemd-hwdb update &&\
sudo udevadm trigger
AT 键盘
echo 'evdev:atkbd:*
KEYBOARD_KEY_1d=leftalt
KEYBOARD_KEY_38=leftctrl' |\
sudo tee /etc/udev/hwdb.d/70-keyboard.hwdb &&\
sudo systemd-hwdb update &&\
sudo udevadm trigger
查找扫描码
运行sudo evtest
命令来查找扫描代码。系统将提示您要监视哪个设备,如下所示。
Available devices:
...
/dev/input/event8: ... Keyboard
...
Select the device event number [0-18]:
选择您的键盘的事件编号继续,然后提示将显示您键入的键的信息。
Event: time 1652208036.880554, -------------- SYN_REPORT ------------
Event: time 1652208037.016512, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1652208037.016512, type 1 (EV_KEY), code 56 (KEY_LEFTALT), value 0
MSC_SCAN 后面的值(700e0
在本例中)是你按下的键的扫描码
写入.hwdb
文件
创造/etc/udev/hwdb.d/70-keyboard.hwdb
evdev:input:b0003v*p*
KEYBOARD_KEY_<hex scan code>=<key code identifier>
或用于 AT 键盘
evdev:atkbd:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
KEYBOARD_KEY_<hex scan code>=<key code identifier>
- 匹配
evdev:input:*
任何通用输入设备(包括 USB 键盘)。 匹配evdev:atkbd:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
任何 AT 键盘。 - 应
<hex scan code>
以十六进制小写形式表示。 - 应
<key code indentifier>
以小写字母或整数表示。键码值可以在文件/usr/include/linux/input-event-codes.h
(参见 KEY_<KEYCODE> 变量)或此处找到在线列表。
应用更改
sudo systemd-hwdb updae && sudo udevadm trigger
示例配置
evdev:input:b0003v*p*
KEYBOARD_KEY_700e0=leftalt
KEYBOARD_KEY_700e2=leftctrl
AT键盘
evdev:atkbd:*
KEYBOARD_KEY_1d=leftalt
KEYBOARD_KEY_38=leftctrl