X11에서 Caps Lock을 esc로 영구적으로 다시 매핑하는 방법은 무엇입니까?

X11에서 Caps Lock을 esc로 영구적으로 다시 매핑하는 방법은 무엇입니까?

탈출을 위해 Caps Lock을 다시 매핑하고 싶습니다.X11에서(즉, 물리적인 Caps Lock 버튼을 누르면 애플리케이션에서 esc로 해석되며 esc의 동작은 변경되지 않습니다.) 해결책X 재시작에서 살아남아야 함.xmodmap 및 setxkbmap이 허용되는 솔루션입니다.(유사 프로그램도 마찬가지입니다.) 솔루션이 이식 가능하고 도트 파일의 일부가 되기를 원하기 때문에 GUI를 다루고 싶지 않습니다. 더 좋고, 더 쉽고, 더 확실한 해결책이 없다면 알려주시기 바랍니다. 그러나 저는 DE를 사용하고 있지 않다는 점에 유의하시기 바랍니다(i3wm 시도).

지금까지 나는 xmodmap과 setxkbmap을 사용해 보았지만 거의 성공하지 못했습니다.

xmodmap을 사용한 시도는 다음과 같습니다.

# ~/.xinitrc
xmodmap ~/.xmodmap

그리고

# ~/.xmodmap
remove Lock = Caps_Lock
keysym Caps_Lock = Escape

명령줄에서 실행하면 $ xmodmap ~/.xmodmap제대로 작동하고 원하는 대로 작동합니다. 문제는 x가 다시 시작될 때마다 재설정된다는 것입니다. 여기가 xinitrc가 나타날 것으로 예상되는 곳입니다. x가 시작되고 xmodmap 명령이 실행될 때마다 로드되어야 하지 않나요? 이 명령이 작동한다면 파일에서 읽을 때 왜 아무 작업도 수행되지 않습니까?

setxkbmap으로 몇 가지를 시도했지만 아무 것도 작동하지 않았습니다. 아래의 두 가지 시도는 파일에 서로 다른 시간에 나타납니다.

# ~/.xinitrc
setxkbmap -option caps:esc     # attempt 1
setxkbmap -option esc:nocaps   # attempt 2

두 명령 모두 명령줄에서 인식할 수 있는 어떤 것도 수행하지 않으므로 내 명령이 잘못되었다고 가정합니다. 저는 이 솔루션이 단일 라인이고 다른 파일의 어떤 것도 필요하지 않기 때문에 이 솔루션의 아이디어를 좋아합니다. 만약 그것이 효과가 있었다면.

잘못된 .xinitrc 파일이 사용되었나요? 나는 startx가 ~/.xinitrc에서 로드된다는 것을 알고 있습니다.

일부 중간 단계를 엉망으로 만들지 않도록 한 줄(파일에 여러 줄이 필요한 경우)이 아닌 전체 파일을 포함할 수 있는 가능한 솔루션을 요청합니다. 예를 들어, .xinitrc의 항목과 .xcapsrebind의 항목이 필요한 경우 해당 두 파일과 필요한 모든 콘텐츠를 표시합니다(끝에 항목을 추가하라는 메시지도 처리할 수 있지만 & 또는 이와 유사한 항목이 필요할 수 있는 경우, 말해주세요).

답변1

편집: 한 유용한 사용자가 지적했듯이 내 원래 솔루션은 업데이트 후에도 유지되지 않습니다. 댓글에 있는 그의 솔루션이 효과가 있을 것입니다. 당신이 원하는 경우교환대신 .xinitrc 또는 i3 구성에서 다음 명령을 추가하는 것이 좋습니다.

.xinitrc:

xmodmap -e "clear lock"
xmodmap -e "keycode 9 = Caps_Lock NoSymbol Caps_Lock"
xmodmap -e "keycode 66 = Escape NoSymbol Escape"

i3 구성 파일(일반적으로 .config/i3/config 또는 .i3/config에 있음)

# swap caps lock and escape
exec_always --no-startup-id xmodmap -e "clear lock"
exec_always --no-startup-id xmodmap -e "keycode 9 = Caps_Lock NoSymbol Caps_Lock"
exec_always --no-startup-id xmodmap -e "keycode 66 = Escape NoSymbol Escape"

나는 이 질문이 꽤 오래되었다는 것을 알고 있지만, 아직도 이 문제를 해결하려고 노력하는 사람들을 위해 답변을 추가할 수 있다고 생각했습니다.

DE가 로드되지 않는 것과 유사한 문제가 발생한 후 ~/.xinitrcxmodmap을 완전히 피하고 /usr/share/X11/xkb/symbolskey=>symbol 매핑을 직접 수정했습니다.

이를 위해 /usr/share/X11/xkb/symbols. 대부분의 키보드에서는 이 pc파일이 있어야 합니다.

파일을 연 후 Escape 및 Caps_Lock 해당 키를 수동으로 전환했습니다(결과는 아래 표시됨). 이는 X가 하드웨어를 키 기호에 매핑하는 방식에 영향을 주기 때문에 GNOME이나 i3 또는 유사한 것을 사용하든 상관없이 작동해야 합니다.

내가 생성한 파일의 일부는 다음과 같습니다.

default  partial alphanumeric_keys modifier_keys

xkb_symbols "pc105" {

    key <ESC>  {        [ Caps_Lock             ]       };

    // The extra key on many European keyboards:
    key <LSGT> {        [ less, greater, bar, brokenbar ] };

    // The following keys are common to all layouts.
    key <BKSL> {        [ backslash,    bar     ]       };
    key <SPCE> {        [        space          ]       };

    include "srvr_ctrl(fkey2vt)"
    include "pc(editing)"
    include "keypad(x11)"

    key <BKSP> {        [ BackSpace, BackSpace  ]       };

    key  <TAB> {        [ Tab,  ISO_Left_Tab    ]       };
    key <RTRN> {        [ Return                ]       };

    key <CAPS> {        [ Escape                ]       };
    key <NMLK> {        [ Num_Lock              ]       };

    key <LFSH> {        [ Shift_L               ]       };
    key <LCTL> {        [ Control_L             ]       };
    key <LWIN> {        [ Super_L               ]       };

    key <RTSH> {        [ Shift_R               ]       };
    key <RCTL> {        [ Control_R             ]       };
    key <RWIN> {        [ Super_R               ]       };
    key <MENU> {        [ Menu                  ]       };

이것은 나에게 매력처럼 작용합니다.

관련 문서를 살펴보면 Escape 및 Caps Lock 교체와 같이 특정 키를 전환하기 위한 일종의 플래그가 반복적으로 언급되고 부분적으로 구현되는 것을 발견했습니다. 나는 이것이 Gnome Tweak Tool과 setxkbmap이 사용하는 것이라고 생각합니다. 그러나 i3 창 관리자를 사용하여 이러한 플래그를 유지하는 방법을 모르겠습니다. 위의 솔루션은 제대로 작동합니다.

이것이 문제를 해결하기를 바랍니다!

답변2

두 가지 가능성:

1) .xinitrc실행되지 않음 - xinit, startx 및 기타 일부 메소드는 이를 사용하여 X 세션을 시작하지만 보편적으로 지원되지는 않습니다. 이를 실행하지 않는 디스플레이 관리자를 사용하고 있을 수 있습니다. .xinitrc에 일부 콘텐츠를 추가하면 touch /tmp/xinitrc-was-run이러한 경우인지 확인하는 데 도움이 될 수 있습니다.

2) Xorg는 연결된 클라이언트가 없을 때 자동으로 기본 설정으로 재설정됩니다. 창 관리자나 다른 항목이 실행되기 전에 .xinitrc가 완료되면 xmodmap 또는 setxkbmap 변경 사항이 손실됩니다.

정의된 XKB 옵션을 사용하려는 경우 Xorg가 시작될 때마다 설정을 변경하기 위해 프로그램을 실행할 필요가 없으며 Xorg에게 올바른 설정으로 시작하도록 지시하기만 하면 됩니다. 예를 들어 Ctrl-Alt-Backspace를 활성화하여 Xserver를 종료하려면 다음이 /etc/X11/xorg.conf.d/90-zap.conf포함된 파일을 설치했습니다.

# This configuration snippet enables the Ctrl-Alt-Backspace server kill key
# 
# To use it, link or copy into /etc/X11/xorg.conf.d/
#
# Note that only the last XkbOptions setting seen for a device will be used,
# so to use multiple options, copy this file and add options into the Option
# string, such as "terminate:ctrl_alt_bksp,ctrl:swapcaps"

Section "InputClass"
    Identifier "keyboard zap by default"
    MatchIsKeyboard "on"

    Option "XKbOptions" "terminate:ctrl_alt_bksp"
EndSection

이에 대한 자세한 내용은 X.Org 설명서에서 확인할 수 있습니다.https://www.x.org/releases/X11R7.7/doc/xorg-docs/input/XKB-Config.html.

답변3

XkbOptions를 X11 구성 파일에 넣을 수 있습니다.

예를 들어 CapsLock과 Escape를 바꾸려면 다음과 같은 방법을 사용합니다 /etc/X11/xorg.conf.d/00-keyboard.conf.

# Written by systemd-localed(8), read by systemd-localed and Xorg. It's
# probably wise not to edit this file manually. Use localectl(1) to
# instruct systemd-localed to update it.
Section "InputClass"
    Identifier "system-keyboard"
    MatchIsKeyboard "on"
    Option "XkbLayout" "en"
    Option "XkbOptions" "caps:swapescape"
EndSection

GNOME을 실행하는 경우 다음 사항에 유의하세요.

GNOME은 gnome-settings-daemon을 사용하여 키보드 구성을 관리합니다. 키보드 관리자는 GSettings를 사용하여 키보드 구성을 저장하고 초기 설정에는 xkb 구성만 사용합니다 [...]

다음 명령을 사용하여 설정을 정리할 수 있습니다.

   gsettings reset org.gnome.desktop.input-sources xkb-options 
   gsettings reset org.gnome.desktop.input-sources sources

다시 로그인한 후 시스템 기본값을 복원해야 합니다.

바라보다여기.

관련 정보