web-dev-qa-db-ja.com

xmodmapやXツールなしでキーを再マッピングする

コーヒー事故により、私のラップトップのキーボードのいくつかは機能しなくなりました。 xmodmapを使用して F1、 F2など、代替として、構成を~/.Xmodmapに保存しました。

しかし、それはいくつかの問題を引き起こしました。

  1. 私はこのコンピュータで常にXを使用するわけではありません。Xを起動しないと、xmodmapは適用されません。

  2. Xの起動に時間がかかります。

  3. 何らかの理由で、xmodmapを介して変更されたキーとは関係のないXFCEキーボードショートカットが機能しなくなりました(実際には、ウィンドウマネージャーのショートカットを除くすべてのキーボードショートカットが機能しなくなりました)。 Xを起動してから数分経過すると、XFCEショートカットが再び正常に機能し始めます。この遅れはそれほど煩わしいものではありませんが、問題でもあります。

Xが起動する前にOSによって読み取られるある種のマッピングがあると思います。そのマッピングを変更する方法はありませんか? Xツールを使用せずにキーボードマッピングを変更する方法はありますか?私はDebianの安定版を使用しています。

PS:どうやらstartxxmodmap .Xmodmapを呼び出すファイルは/etc/xdg/xfce4/xinitrcです。その内容は here にあります。

13
Alex

まず、良いニュース

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キーボードレイアウトの定義と使用については、以下を参照してください。

  1. ハウツー:カスタムキーボードレイアウトの定義 UbuntuコミュニティWiki。
  2. Linuxでキーボードレイアウトを変更する方法 、Romano Giannettiによるブログ投稿。

どちらも今年(2014)に書かれたので、情報は最新のものでなければなりません。 Ubuntuのwiki情報はすべてXでxkbシステムを使用しているため、ほとんどのディストリビューションに適用できます。

24
FeRD

X11かどうかにかかわらず、システム全体に適用するのに十分な低レベルで再マッピングする方法が実際にあり、libinputの再マッピング用のUIの公開を怠るWaylandコンポジターの取り込みが見られるようになったため、これらの方法はこれまで以上に重要になっていますサポート。

基本的に、カーネルの入力層がコンソールまたはX11とWaylandが置かれているevdev APIに到達する前に、生のスキャンコードをキーコードに変換する方法を再構成する必要があります。

私はそれを行う2つの方法を知っています。

  1. キーボードのハードウェアデータベース(hwdb)エントリを変更します。 udevを使用すると、/etc/udev/hwdb.d/にルールファイルを追加し、systemd-hwdb updateを使用してデータベースの再構築をトリガーし、udevadm triggerを介して再起動せずに適用することができます。

    このArchiWikiページ には完全な手順があり、X11とコンソール入力の両方で機能することを明示的に述べています。

  2. evdevremapkeys という名前のデーモンがあります。これは、evlandデバイスのキーイベントを、Waylandコンポジターなど、サポートしていないevdevクライアントにサルパッチ再マッピングサポートに再マッピングするために特別に書かれています。

    基本的に、G15Daemonのような非標準の入力デバイスを補正する必要のあるユーザー空間ドライバーと同じアプローチを使用します。 (evdevデバイスを開いて、再マップする予定のイベントを飲み込みます。そうすれば、デバイスをリッスンしている他の誰もそれらを見ることができません。その後、uinput AP​​Iを介して修正されたイベントを発行し、ユーザースペースからカーネルレベルの入力デバイスを作成します。 )

5
ssokolow

免責事項:私はこのプロジェクトの作成者です。ウェイランドに移動し、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-macrodhawck-inputdlsinputのマンページにあります。

1
A_User