Debian で X (setxkbmap 経由) と (カーネル) 仮想コンソール (TTY) が使用する単一ユーザー固有のファイルのキーマップを変更するにはどうすればよいですか?

Debian で 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に対して同等のメソッドを作成します。私はこのハッキングが唯一の方法だとは信じていません。XKBOPTIONSsetxkbmap -optionhttps://who-t.blogspot.com/2020/02/user-特異的-xkb-configuration-part-1.htmlこの信仰に疑問を持たせます。

現在私はDebianとX(+ LXDE)を使用しています。私はこれがウェイランドに何の影響も与えないと思いますが、もしそうなら、説明してください。

答え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

関連情報