起動時にコマンドを実行して、Caps LockとCtrlを交換します。

起動時にコマンドを実行して、Caps LockとCtrlを交換します。

なぜこれが期待どおりに機能しないのか少し混乱しています。私の目標は、Caps Lockキーをコントロールにマッピングすることです。私はDebianを使用しています。これを行うには、次のコマンドを使用します。

/usr/bin/setxkbmap -layout "$(setxkbmap -print | awk -F + '/xkb_symbols/ {print $2}')" -option ctrl:nocaps

端末を介して実行すると完璧に動作します。しかし、私はこの作業を開始時またはログイン時に実行したいと思い、常に手動で実行したいと思います。このコマンドをXFCEの自動起動セッションアプリケーションに追加し、そのコマンドを発行します~/.profile。それでも手動で行う必要があります(正しくマッピングした後)。私は何が間違っていましたか?

答え1

setxkbmapコマンドが追加された後に実行されない理由~/.profileは、シェル(おそらくbash)が次の場合にのみファイルを読み取るためです。ログインシェルが起動しました。Xターミナルエミュレータでログインシェルを起動しないでください。を使用していますが、setxkbmapシステムでより良い方法が利用できる場合は追加してください。次のようにセクションを編集してください。~/.bashrcBashdebianXKBOPTIONS/etc/default/keyboard

root@debian:/home/ja# cat /etc/default/keyboard
# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS="ctrl:nocaps"

BACKSPACE="guess"

次に、以下の説明に従ってこのコマンドを実行しますman 7 keyboard

udevadm trigger --subsystem-match=input --action=change

再起動する必要もありませんlightdm。次回の起動時に設定が自動的に適用されますlightdm/etc/default/keyboard私はちょうど私の中にいましたDebian 9.4

答え2

私の考えのより良い方法は、ホームディレクトリに.xsessionrcファイルを作成することです。

cat .xsessionrc 
setxkbmap -option ctrl:nocaps

このファイルは、各セッションの開始時に読み取られます。
これにより、ユーザーのセッションだけが影響を受けます。
他のユーザーは理解していません。
DebianとNetBSDでは問題はありません。

関連情報