コーヒー事故により、私のラップトップのキーボードのいくつかは機能しなくなりました。 xmodmap
を使用して F1、 F2など、代替として、構成を~/.Xmodmap
に保存しました。
しかし、それはいくつかの問題を引き起こしました。
私はこのコンピュータで常にXを使用するわけではありません。Xを起動しないと、xmodmap
は適用されません。
Xの起動に時間がかかります。
何らかの理由で、xmodmap
を介して変更されたキーとは関係のないXFCEキーボードショートカットが機能しなくなりました(実際には、ウィンドウマネージャーのショートカットを除くすべてのキーボードショートカットが機能しなくなりました)。 Xを起動してから数分経過すると、XFCEショートカットが再び正常に機能し始めます。この遅れはそれほど煩わしいものではありませんが、問題でもあります。
Xが起動する前にOSによって読み取られるある種のマッピングがあると思います。そのマッピングを変更する方法はありませんか? Xツールを使用せずにキーボードマッピングを変更する方法はありますか?私はDebianの安定版を使用しています。
PS:どうやらstartx
でxmodmap .Xmodmap
を呼び出すファイルは/etc/xdg/xfce4/xinitrc
です。その内容は here にあります。
Linuxシステムコンソールには、独自のキーボードマッピングのセットがあり、kbd
パッケージのツールを使用して管理できます。具体的には、検出用のdumpkeys
およびshowkey
およびloadkeys
は、カスタマイズされたマッピングでロードします。 SuperUserの質問 Linuxでコンソールのキーマップを変更する方法は? には、これらのツールの使用方法に関する適切な情報が含まれています。
これらのツールを使用すると、xmodmap
を使用したり、Xを実行したりすることなく、Linuxコンソールでキーを再マッピングできるのは事実ですが、これらはonly仮想テキストのキーマッピングに影響しますコンソール。 XのXInput/evdevシステムは入力デバイスから直接読み取り、独自の処理を行うため、変更はグラフィカル環境ではまったく影響を与えません。
したがって、コンソールで再マッピングしてどこにでも適用することでxmodmap
の使用を回避したい場合は、うまくいきません。実際、再マッピングする必要がありますbothコンソール(loadkeys
を使用)and X11(xmodmap
のようなメソッドを使用)、どこでも同じキーボードレイアウトを使用します。
xmodmap
の速度低下(および再配置がグリッチでレイアウト切り替えを使用するデスクトップ環境で永続的でないためバグが多い)の解決策は、完全にnewキーボードレイアウトを定義することですランタイムの変更を適用するのではなく、以前に使用していたレイアウトのすべて。 Xの起動時に、現在使用しているものではなく、新しい再マップされたレイアウトをロードします。 (xmodmap
が使用できなくなったため、最近のUbuntuや他のディストリビューションでも、これがonlyキーボードレイアウトを確実に変更する方法になりました。)
カスタムxkb
キーボードレイアウトの定義と使用については、以下を参照してください。
どちらも今年(2014)に書かれたので、情報は最新のものでなければなりません。 Ubuntuのwiki情報はすべてXでxkb
システムを使用しているため、ほとんどのディストリビューションに適用できます。
X11かどうかにかかわらず、システム全体に適用するのに十分な低レベルで再マッピングする方法が実際にあり、libinputの再マッピング用のUIの公開を怠るWaylandコンポジターの取り込みが見られるようになったため、これらの方法はこれまで以上に重要になっていますサポート。
基本的に、カーネルの入力層がコンソールまたはX11とWaylandが置かれているevdev APIに到達する前に、生のスキャンコードをキーコードに変換する方法を再構成する必要があります。
私はそれを行う2つの方法を知っています。
キーボードのハードウェアデータベース(hwdb
)エントリを変更します。 udevを使用すると、/etc/udev/hwdb.d/
にルールファイルを追加し、systemd-hwdb update
を使用してデータベースの再構築をトリガーし、udevadm trigger
を介して再起動せずに適用することができます。
このArchiWikiページ には完全な手順があり、X11とコンソール入力の両方で機能することを明示的に述べています。
evdevremapkeys という名前のデーモンがあります。これは、evlandデバイスのキーイベントを、Waylandコンポジターなど、サポートしていないevdevクライアントにサルパッチ再マッピングサポートに再マッピングするために特別に書かれています。
基本的に、G15Daemonのような非標準の入力デバイスを補正する必要のあるユーザー空間ドライバーと同じアプローチを使用します。 (evdevデバイスを開いて、再マップする予定のイベントを飲み込みます。そうすれば、デバイスをリッスンしている他の誰もそれらを見ることができません。その後、uinput
APIを介して修正されたイベントを発行し、ユーザースペースからカーネルレベルの入力デバイスを作成します。 )
免責事項:私はこのプロジェクトの作成者です。ウェイランドに移動し、xmodmapの交換が必要なときに同様の問題が発生しました。代替方法の文書化が不十分で、操作が難しいことがわかったので、新しい代替方法を作成しました。
Hawck と呼ばれるソフトウェアスイートを使用できます。これは、低レベルのLinux入力とキーボードAPIを使用するため、ディスプレイサーバーに依存しません。
あなたの特定のケースでは、解決策はGitHubからプロジェクトのクローンを作成し、install.sh
スクリプトを実行することです。残念ながら、インストーラーはユーザーを新しいグループに追加するため、再起動する必要があります。
次に、Hawckデーモンを起動する必要があります
$ Sudo systemctl start hawck-inputd
$ hawck-macrod
Hawck UIが続きます
$ hawck-ui
次に、「スクリプトの編集」セクションに移動して、次の内容のスクリプトを追加します。
key "F1" => insert "1"
key "F2" => insert "2"
エディターの上にあるトグルボタンをクリックしてスクリプトを有効にすると、パスワードの入力を求められます。
このスクリプトを永続的に有効にするには、UIの設定セクションに移動し、自動起動トグルボタンをクリックします。
その他のドキュメントは、GitHub README、およびhawck-macrod
、hawck-inputd
、lsinput
のマンページにあります。