如何在键盘上切换左 Ctrl 键和左 Alt 键?

如何在键盘上切换左 Ctrl 键和左 Alt 键?

键盘布局选项中没有这样的选项,这很遗憾。

我怎样才能手动完成?

答案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-tweakssudo apt-get install gnome-tweaks
  • 打开它
  • 键盘和鼠标->附加布局选项
  • 更改控制位置选择交换左 Alt 键和左 Ctrl 键

Gnome 调整截图

您可能也可以通过 来执行此操作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

也可以看看

相关内容