Wayland의 컨트롤에 Capslock 매핑

Wayland의 컨트롤에 Capslock 매핑

Fedora 26으로 업데이트했는데 이제 Capslock 키가 이상하게 작동합니다(또는 전혀 작동하지 않습니다). Fedora 25에서는 xkb 설정이 Ctrl 및 Caps 변경에 매우 효과적입니다. Gnome Tweak Tools에서 "Caps as Ctrl"을 선택했는데 Caps가 전혀 아무것도 하지 않습니다! 대문자 키를 사용하면 xev다음과 같은 결과가 나타납니다.

KeyRelease event, serial 36, synthetic NO, window 0x2600001,
    root 0x273, subw 0x0, time 2293119, (164,-21), root:(271,94),
    state 0x10, keycode 66 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

키코드 뒤의 괄호에는 NoSymbol 대신 LCtrl이 포함되어야 합니다. 또한 Caps를 비활성화 및/또는 활성화해 보았습니다. 이 외에도 /usr/share/X11/xkb/keycodes/evdevCaps = 37을 수정하고 사용하여 Caps를 Left Control과 유사하게 만들려고 했지만 이 역시 효과가 없었습니다. 저를 도와주세요. 저는 Wayland 이후로 조금 길을 잃었습니다!

또한 다음을 통해 왼쪽 컨트롤과 Alt를 변경했습니다.

<LALT> = 37; //64;
<LCTL> = 64; //37;

이전에 언급한 파일에서 -> 이것은 여전히 ​​매력적으로 작동합니다!

답변1

일시적으로 수정했습니다(이 부분이 많은 사랑을 받을 수 있기를 바랍니다). 아래에서는 " "를 제외한 모든 항목을 선택 취소 gnome tweak tools했습니다 . 프로그램이 "Capslock - 비활성화됨" 및 "Capslock 비활성화됨"과 같은 많은 옵션을 중복으로 나열하고 대부분의 옵션이 명확하지 않게 표시되어 있으므로 Caps Lock 제어가 많은 옵션에 의해 수정되는 이유를 잘 모르겠습니다.TypingCapslock is also Control

답변2

Gnome 조정 키보드 및 마우스 추가 레이아웃 옵션 여기서 Caps Lock 옵션을 찾을 수 있습니다.

답변3

Gnome이 아닌 환경, KDE 환경, Wayland를 다루는 리소스가 많지 않기 때문에 완전성을 위해 이 답변을 남깁니다.

저는 Debian Buster를 사용하고 XWayland 위에서 WM으로 Fluxbox를 실행하고 있습니다(이는 XWayland WM이 아닌 경우 작동하지 않을 수 있음을 의미합니다). 일반적인 작업, 즉 맵을 설정하면 .xmodmaprc실제로 작업이 수행됩니다.

remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L

이 솔루션은 XWayland 기반 WM에서만 작동할 수 있다는 Mark의 의견을 반영하여 업데이트되었습니다.

답변4

Caps lock또 다른 해결책은 및 를 Ctrl사용 하도록 매핑을 구현하는 것입니다 .caps2escinterception_tools

이후 다음 단계가 수행되고 설명되었습니다.탈출 및 제어를 위해 Caps2esc를 통해 Fedora에서 Caps Lock을 매핑하는 방법, 필요한 경우 자세한 내용을 제공합니다.


둘 다 설치 caps2esc하고interception_tools

cd ~/your/code/directory
git clone https://gitlab.com/interception/linux/tools interception_tools
git clone https://gitlab.com/interception/linux/plugins/caps2esc

inception_tools종속 라이브러리 설치

sudo dnf install cmake yaml-cpp-devel libevdev-devel systemd-devel -y

caps2esc해당 디렉터리에서 빌드 및 설치, 실행 inception_tools하고 설치를 확인합니다.sudo make install

which udevmon
which caps2esc

inception_tools에서 가로챌 키를 지정하도록 구성하세요 /etc/caps2esc.yaml. 이 경우 키는 KEY_CAPSLOCK및 다음과 같습니다 KEY_ESC.

- JOB: "intercept -g $DEVNODE | caps2esc | uinput -d $DEVNODE"
  DEVICE:
    EVENTS:
      EV_KEY: [KEY_CAPSLOCK, KEY_ESC]

이제 데몬 프로세스를 생성합니다(참조:이 답변도착하다systemd에서 프로세스를 서비스로 만드는 방법은 무엇입니까?) 에 대한 systemd자세한 내용을 보려면 /etc/systemd/system/caps2esc.service다음을 포함하는 항목을 생성하세요.

[Unit]
Description=caps2esc

[Service]
ExecStart=/usr/bin/nice -n -20 /usr/local/bin/udevmon -c /etc/caps2esc.yaml

[Install]
WantedBy=multi-user.target

이제 systemctl서비스를 관리하는 데 사용됩니다.

sudo systemctl daemon-reload
sudo systemctl enable caps2esc # Start on bootup
sudo systemctl start caps2esc # Start now too

caps+ 이제 + 를 C실행 해야 하며 이는 터미널에서 확인할 수 있습니다.ctrlC

관련 정보