web-dev-qa-db-ja.com

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

なぜこれが意図したとおりに機能しないのか、少し戸惑っています。私の目標は、Caps Lockキーを制御対象にマッピングすることです。私はdebianを使用しています。このために、私は次のコマンドを使用しています

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

ターミナル経由で実行すると完全に正常に動作します。ただし、これは起動時またはログイン時に実行し、常に手動で実行する必要があります。このコマンドをXFCEの自動起動セッションアプリケーションに追加し、コマンドを~/.profileに追加しようとしました。ただし、どちらのオプションも機能しないようです。それでも手動で実行する必要があります(正しくマッピングされた後)。私は何が間違っているのですか?

3
math

setxkbmapコマンドを~/.profileに追加した後、コマンドが実行されなかった理由は、このファイルがシェル(おそらくbash)によって読み取られるのは、loginシェルが開始されたときだけだからです。 Xでは、ターミナルエミュレータはログインシェルを起動しません。 setxkbmapを使用する場合はBash~/.bashrcに追加しますが、debianシステムで利用できるより良い方法があります-/etc/default/keyboardXKBOPTIONSセクションを変更します。例:

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でテストしました。

7

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

cat .xsessionrc 
setxkbmap -option ctrl:nocaps

このファイルは、セッションの開始ごとに読み取られます。
このようにすると、セッションのみが影響を受けます。
他のユーザーはそれを取得しません。
DebianとNetBSDでは問題ありません。

4
ctac_