1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RaspberryPiのキーをカスタマイズする

Posted at

やりたいこと

  • USBボリュームコントローラーによるRaspberryPiへの入力をabなどにカスタマイズしたい

環境

  • RaspberryPi
    • RaspberryPi OS Lite 64bit
    • 元々はCUIモードで起動
  • USBボリュームコントローラー

image.png

結論

  1. GUIをインストールして起動する
  2. setxkbmap -printを流して、どのsymbolsファイルが使われているかチェックする
  3. usr/share/X11/xkb/symbols/の中から使われているsymbolsをバックアップした後、編集する
    • (ここで、無理に同時押し(a+bとか)をやるとOSが起動しなくなる)
    • 無理は禁物。1キーにつき1キーの割り当て。
  4. RaspberryPiを再起動する

作業

方法の模索(追想)

今回は作業しながらのメモではなく、作業後に書いているので、キャプチャが少なめ

xkbを使うと実際のキーボードで入力されたものを、他のものに変換できるらしい。

まずWindows11のPCからRaspberryPiにSSH接続して、setxkbmap -printをやってみたが、上記サイト通りの出力にはならない。

Cannot open display "default display"

image.png

SSH接続が原因かもしれない(下記参考サイトより)と思って、直接RaspberryPiにキーボードを接続して同様のコマンドを入力してみたが、出力は変わらなかった。
WIN_20230307_22_14_34_Pro.jpg

export Display:=0.0っていう風にしてるサイトがあった。

RaspiのCUIに直接打つと

Cannot open display ":0.0"

てなった。
WIN_20230307_22_16_20_Pro.jpg

でも今SSH上でやってみたらうまくいった。不思議。でも当時は気付かなかった。
image.png

GUIの起動

displayがどうたらって言ってるからGUIを起動すればいいんじゃないかってなって、以下の手順でGUIを起動する。SSH接続でも操作可能。
なお、GUIは後付けでもインストールできるらしい。一番下にリンクを貼っておく。

sudo raspi-config

image.png

1 System Optionsを選択
image.png

S5 Boot / Auto Loginを選択
image.png

B4 Desktop Autologinを選択。(AutoLoginである必要はなく、B3 Desktopでも良いはず)
image.png

Exit等でraspi-config状態を出た後、sudo rebootで再起動。

ターミナルでsetxkbmap -printを実行。表示された。
WIN_20230307_22_55_54_Pro.jpg

xkbを利用してキーマップの書き換え

以下SSH接続した画面。
大事なのはxkb_symbolsのところ。
image.png

これらのファイルは/usr/share/X11/xkb/symbols/の中にある。
(X11のXは大文字)
これらのファイルは慎重に編集すること。変なコードを書くとOSの起動に失敗したりする。
image.png

pcという名前のファイルにはEscapeReturn(これがEnterに相当する)などの基幹コードが設定されている。
これを書き換えて、Enterが打てなくなったりしたら大変そう。
image.png

usという名前のファイルにはUSキーボードの基幹コード以外の定義がある。
2つの定義が並んでいるが、このうち1はそのまま打ったもの、excalm!のことで、Shiftを打ちながら売った場合の定義。

key <AE01> {        [         1,    exclam          ]       };

これらを書き換えたあと再起動すると、実際に1のキーでReturn(Enter)が打てたりするようになる。
ただし、書き換える時は元々のファイルにあるキーコードを参考にすること。じゃないとOSがクラッシュする可能性がある。
image.png

inetには特殊キーの定義が入っている。この中のevdevの記述があるところが採用されている。
ちなみに、使用したUSBボリュームコントローラーがどのようなキー入力をしたかはQMK configuratorのテスト機能を使えば分かりやすい。今回のケースではAudioVolumeDownなどのようである。
だから、inetの赤矢印の部分を変更する。

image.png

image.png

RaspberryPi上でも、音量を調整している様子が見られる。
WIN_20230307_23_02_16_Pro.gif

いざinetを編集。赤矢印のところが変更を加えたところ。明らかにインデントがずれている。
Vol-aVol+でbが入力されるようにした
image.png

再起動してキーマップの変更を適用する。狙い通りVol-aVol+でbが入力されるようになった。
これでread -n 1 input_str(入力を1キーだけ受け付けるコード)と組み合わせれば、aが入力された度に繰り返したい作業などが実行できる。
WIN_20230307_23_12_17_Pro.gif

CLIに戻すと音量キーがなくなる小話

それで入力できるようになったから、CLIに戻してみた。
するとなんとVol+の回転では何も入力されず、Vol-の回転では~が入力される。
inetを元に戻しても同様だったから、CLIの時はVol+Vol-は存在しないらしい。
WIN_20230307_22_23_30_Pro.gif

だからGUIに戻した。

参考サイト

GUIのインストール方法 (筆者はなぜかGUIが元々入っていたのでやっていない)

xkbを使うことになったきっかけ

xkbの設定で簡単だったサイトたち

cannot open display "default display"に関するサイト

export Display:=0.0っていう風にしてるサイト

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?