`xmodmap`が起動時に機能しない

`xmodmap`が起動時に機能しない

私は最近Debian 9をインストールし、普段使っていた~/.Xmodmapファイルをリンクしてからそれを私xmodmap ~/.Xmodmap.xsession.

ちなみにDMなしi3で走っていますstartx

コマンドが正常に実行されたかどうかをテストするために私のコマンドを.xsessiontouch ~/prior && xmodmap ~/.Xmodmap && touch ~/postxmodmapsetxkbmap

解決策を検索しましたが、答えがない質問、私には役に立たない古い回答がある質問、実際の解決策が含まれていない質問のみを見つけました。

答え1

この動作の理由は、以下で間接的に文書化されていますman keyboard

説明する

キーボードファイルはキーボードのプロパティを記述します。その読者はセットコーン(1)コンソールでキーボードを設定するには。 Debianシステムでは、デフォルトのキーボードレイアウトは/etc/default/keyboardで説明されています。Xとコンソール間で共有されます。

/etc/default/keyboardシステムがインストールされ、実際の問題が発生したときの内容が生成されました(ctrl:nocaps後でオプションを追加しました)。

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

上記は、Xが起動中の特定の時点(おそらくその後など)にxkbオプションを設定し、その間に設定されたすべての設定が失われることを示しています.xsessionxmodmap.xsession

これは理由が出て解決策は次のとおりですman setupcon

キーボード構成は ~/.keyboard または /etc/default/keyboard で指定されます。これフォント構成 ~/.console-setup に指定するか、/etc/default/コンソール設定

収量の確認man console-setup:

console-setupファイルは、setupcon(1)がコンソールを設定するために使用するエンコーディングとフォントを指定します。 キーボードレイアウトの指定にも使用できます。これはお勧めできません。代わりにキーボード(5)を使用してください。

したがって、/etc/default/keyboardTTYとXを設定するためのキーボード設定です。 Whileは、/etc/default/console-setupコンソールのキーボード(実際にはお勧めできませんが動作します)とフォントを設定するために使用できます。

だから私はこれをすべて行うために以下を/etc/default/keyboard 追加しました。/etc/default/console-setup.xsession

#!/bin/bash
# The below assumes bash features, rewrite if you use other shells.
source /etc/default/console-setup

XKBPARMS=""
if [[ "$XKBLAYOUT" ]]; then
   XKBPARMS="-layout $XKBLAYOUT"
fi

if [[ "$XKBMODEL" ]]; then
    XKBPARMS+=" -model $XKBMODEL"
fi

if [[ "$XKBVARIANT" ]]; then
    XKBPARMS+=" -variant $XKBVARIANT"
fi

if [[ "$XKBOPTIONS" ]]; then
    XKBPARMS+=" -option $XKBOPTIONS"
fi

if [[ "$XKBPARMS" ]]; then
    setxkbmap $XKBPARMS
fi

xmodmap ~/.Xmodmap

これでうまくいきますxmodmap。 TTYとXの両方に正しいキーマップとオプションがあります。

答え2

また、-type ソリューションにも問題があったxmodmapため、調査した後、ただ使用することにしましたxkb。私も見つけました。xmodmapArchwikiは「最も簡単な」作業をお勧めしません。:

通常、最も簡単な操作を除いて、xmodmapを使用しないことをお勧めします。 xmodmapと同等のXKB互換はxkbcompです。しかし、xkbcompには-eオプションがないため、状況はそれほど単純ではありません。それにもかかわらず、可能な限りxkbcompを好む必要があります。

次の解決策が私にとって効果的でした(Ubuntu 16.04で)。

残念ながら、これはTTYとTTYの2つの別々のソリューションを追跡することを意味しますXが、これまでは良いと思います。

しかし、xmodmapすでに効果的な解決策があればそれはすべてです!

関連情報