데비안에서 X(setxkbmap을 통해)와 (커널) 가상 콘솔(TTY)이 사용하는 단일 사용자별 파일의 키맵을 변경하는 방법은 무엇입니까?

데비안에서 X(setxkbmap을 통해)와 (커널) 가상 콘솔(TTY)이 사용하는 단일 사용자별 파일의 키맵을 변경하는 방법은 무엇입니까?

이것은 중복이 아닙니다X/콘솔에 구애받지 않는 방식으로 콘솔(tty) 및 X에서 키보드 레이아웃/매핑을 변경하시겠습니까?,중 하나전체 시스템 /etc/default/keyboard논의 중.

사용하려고 합니다사용자별X(예: +LXDE) 및 (커널) 가상 콘솔(VT/TTY)에서 설정이 사용되는 ~/.keyboard파일 입니다 .xkb

여기에서 볼 수 있듯이, 실행 시 사용자 환경이 보존되면 cat $(which setupcon)가상 콘솔은 사용자별 파일(또는 그 중 하나)을 선택할 수 있습니다 .~/.keyboardVARIANTsetupcon

sudo -E setupcon

이는 setupcon(다소) xkb 기반 ~/.keyboard설정( XKBMODEL, 등) XKBLAYOUTXKBOPTIONS콘솔 키맵 유형( pass ckbcomp)으로 변환하고 loadkeys결과를 콘솔로 변환합니다. 이용자의 환경이 보존되지 않는 경우,

sudo setupcon

그런 다음 /etc/default/keyboard픽업되었습니다.

그러나 내가 아는 한 X는 setxkbmap시스템 전체 /etc/default/keyboard파일만 가져옵니다. 사용자별 정보는 ~/.keyboard수집되지 않습니다.setxkbmap. 하지만 그것이 바로 나에게 필요한 것입니다. 즉, ~/.keyboard먹이를 주려고 하는 것이다 setxkbmap. 이럴 때 할 수 ~/.xsessionrc있었으면 좋겠어~/.keyboardsetxkbmapsudosetxkbmap -option

사용자별 xkb 디렉토리 계층 구조 를 수동으로 생성하여 xkbcomp -I.~/.keyboard

지금까지 내가 본 유일한 접근 방식은 해킹입니다. 수동으로 구문 분석하고 ~/.keyboard추출한 XKBOPTIONS다음 setxkbmap -option각 메서드에 대해 동등한 메서드를 작성합니다. 나는 이 해킹이 유일한 방법이라고 믿지 않습니다.https://who-t.blogspot.com/2020/02/user-특이적-xkb-configuration-part-1.html이 믿음에 의문을 갖게 만듭니다.

현재 저는 Debian과 X(+ LXDE)를 사용하고 있습니다. 저는 이것이 Wayland에 아무런 영향을 미치지 않을 것이라고 생각하지만 만약 그렇다면 설명해주세요.

답변1

다른 사람에게도 효과가 있다면 위에서 언급한 방법 중 제가 지금 사용하게 되는 방법은 다음과 같습니다.

~/bin/setxkbmap.sh구문 분석하고 ~/.keyboard, xkb 설정을 추출하고, X에서 해당 setxkbmap 명령을 실행합니다. ~/bin/setxkbmap.shX가 다음과 같은 줄로 시작될 때 수동으로 호출하거나 자동으로 호출할 수 있습니다 ~/.xsessionrc.

~/bin/setxkbmap.sh:

#!/bin/bash
# Parse ~/.keyboard, extracting the xkb settings, and run equivalent
# setxkbmap command(s) in X.

source ~/.keyboard
setxkbmap_cmd=(setxkbmap -model "${XKBMODEL}")
setxkbmap_cmd+=(-layout "${XKBLAYOUT}")

# Clear previously-set options first; otherwise, these will be
# appended to whatever is already there.
setxkbmap_cmd+=(-option)

# -r      : do not allow backslashes to escape any characters
# -a array: assign the words read to sequential indices of the array
#           variable ARRAY, starting at zero
IFS=',' read -r -a xkbopts <<< "${XKBOPTIONS}"
for opt in "${xkbopts[@]}"; do
    setxkbmap_cmd+=(-option "${opt}")
done

"${setxkbmap_cmd[@]}"

~/.keyboard:

XKBMODEL="pc105"
XKBLAYOUT="us"

# ctrl: specifies options coming from /usr/share/X11/xkb/symbols/ctrl
# file.
XKBOPTIONS="ctrl:menu_rctrl,ctrl:nocaps,ctrl:swap_rwin_rctl,terminate:ctrl_alt_bksp"

~/.xsessionrc:

# ~/.xsessionrc is sourced by Xsession (a sh script), everytime an X
# session is started. See 'man xsession' for details.

# Explicitly use bash, as ~/.xsessionrc is called by sh (dash in
# Debian 9 GNU/Linux).
bash ~/bin/setxkbmap.sh

관련 정보