Table of Contents
想定環境
- Browser: Google Chrome
- OS: Ubuntu 22.04.4 LTS
1
2
3
4
5
6
% lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.4 LTS
Release: 22.04
Codename: jammy
設定内容はキーボードに直接保存されるのでどのOSを用いていても, 実行手順は大きく異なりません.
ただし, Browser上のVIA経由でKey remappingを実行する際に/dev/hidraw
デバイスの権限設定を行う必要があり, この箇所のみUbuntu特有の流れとなります.
ショートカット対象
スクリーンレコーディング用ソフトのKazam Screen Recorderのショートカットキーをマクロキーとして今回設定しております.
1
2
3
4
5
6
7
8
9
% apt-cache policy kazam
kazam:
Installed: 1.4.5-5
Candidate: 1.4.5-5
Version table:
*** 1.4.5-5 500
500 http://jp.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages
500 http://jp.archive.ubuntu.com/ubuntu jammy/universe i386 Packages
100 /var/lib/dpkg/status
Kazamではレコーディング時にスピーカーやマイクなどの入力デバイスから音声をキャッチするオプションがある, また以下のようなショートカットキーがあります. 今回は以下のショートカットキーをMacro Keyにアサインしています.
ショートカット | 動作 |
---|---|
Super + CTRL + R |
Start recording |
Super + CTRL + F |
Finish recording |
Super + CTRL + Q |
Quite recording |
Key remappingのための前準備
環境準備
- the V10 Max Knob Ansi(US) keymap JSON Fileをダウンロードする
sudo chown $USER:$USER /dev/hidraw1
を実行し, WebHID APIを実行できるようにする
V10 Max Knob Ansi(US) keymapの準備
2024-04-08時点では, V10 MaxのVIAコードはまだ自動的に認識されません. V10 MaxのキーマップをVIAで動作させるには以下の手順を実行します:
- the V10 Max Knob Ansi(US) keymap JSON Fileをダウンロード
- VIAを開いて,「Setting」タブで「Show Degin tab」をオン
- 上記JSON fileを「Design」タブへドラッグ
/dev/hidraw
デバイスの権限設定
VIAでキーボードを認識させる際に以下のようなエラーに遭遇する場合があります.
1
2
3
4
5
6
7
8
9
10
21:16:46.347
Failed to open the device.
Device: Keychron Keychron V10 Max
Vid: 0x0568
Pid: 0x2119
21:16:46.357
Received invalid protocol version from device
Device: Keychron Keychron V10 Max
Vid: 0x0568
Pid: 0x2119
このときchromeでchrome://device-log/
をアドレスバーに入力すると, 以下のようなログが見ることができます.
1
2
chrome://device-log/
[21:16:46] Failed to open '/dev/hidraw1': FILE_ERROR_ACCESS_DENIED
キーボード設定のため, /dev/hidraw1
を開こうとしたら権限がなくて開けませんというエラーになります.
権限を確認してみると, rootユーザーしか開けないことが以下で分かります.
1
2
% ls -l /dev/hidraw1
crw------- 1 root root 240, 1 Apr 22 20:28 hidraw1
そのため, 一時的に権限を自分に以下のコマンドで付与します
1
% sudo chown $USER:$USER /dev/hidraw1
上記実行後, VIAでキーボード設定が可能となります.
警告 !
本来的にはrootユーザーしか権限がないファイルなので, キーボード設定後は権限を修復するという観点で以下コマンドを実行してください:
1
% sudo chown root:root /dev/hidraw1
Key remapping
設定内容一覧
Windows Modeについて以下の項目を設定
Insert
→End
へ変更- Knobをzoom-in, zoom-out, zoom-resetへ変更
Macro Key
にKazamのショートカットキーをアサイン- アプリ立ち上げ, Start Recording, Stop Recording, Quit the Kazam
最終的には以下のような配置へ変更しました.
LAYER LEVEL 2での設定
今回はWindows Modeの配列を変更するので, LAYER LEVEL 2での設定となります.
- LAYER LEVEL 0: Mac Mode
- LAYER LEVEL 1: Mac Mode fn mode
- LAYER LEVEL 2: Windows Mode
- LAYER LEVEL 3: Windows Mode fn mode
Keyの位置を変更する場合は, Layoutの変更対象キーをダブルクリックすると点滅するので, 点滅確認後に変更先キーをkey listの中から選択することで実現できます.
Macro設定
Basic Keycodesを参考にマクロにアサインする組み合わせを設定します.
Macro action | Key setting | Ubuntu側でのショートカットキー |
---|---|---|
Kazam立ち上げ | {KC_LGUI,KC_6} |
super + 6 |
Kazam Start Recording | {KC_LCTL,KC_LGUI,KC_R} |
ctrl + super + R |
Kazam Stop Recording | {KC_LCTL,KC_LGUI,KC_R} |
ctrl + super + F |
Quit Kazam | {KC_LCTL,KC_LGUI,KC_Q} |
ctrl + super + Q |
zoom in | {KC_LCTL,KC_EQL} |
ctrl + + |
zoom out | {KC_LCTL,KC_MINS} |
ctrl + - |
zoom reset | {KC_LCTL,KC_0} |
ctrl + 0 |
Appendix: /dev/hidraw
デバイス
HIDRAW - Raw Access to USB and Bluetooth Human Interface Devices
- HID ( Human Interface Device ) とは, 人間から入力を受けたり, 人間に出力を提供したりする装置のこと
- HIDRAWは USBやBluetooth HID用のドライバーのこと
特に, インストールや設定手順を簡略化するために設計された, ホストとデバイス間の双方向通信のための標準規格のことをとくにHIDプロトコルと呼びます. HID プロトコルはもともと USB デバイス用に開発されたものですが, その後 Bluetooth をはじめとする多くのプロトコルで実装されたという流れがあり, 「HIDRAWは USBやBluetooth HID用のドライバー」という現在に至っております.
ホストとデバイスの通信にあたって, HIDリポートを介して情報のやり取りを行います.
項目 | 説明 |
---|---|
HID レポート | ホストとデバイス間で通信されるバイナリデータパケットのこと. 入力レポートはデバイスからホストに送信され, 出力レポートはホストからデバイスに送信されます. HID レポートのフォーマットはデバイス固有のもの |
HID レポート記述子 | デバイスの列挙中にホストから要求することができます. レポート記述子は, デバイスがサポートするレポートのバイナリ形式を記述します. 記述子のフォーマットは HID 仕様で定義されています |
HID usage | 標準化された入力または出力を参照する数値. Usage の値を使用することで, デバイスはレポートの各フィールドの目的と同様に, デバイス自体の意図された使用法を記述することができます. |
HIDRAWはキャラクタデバイス
1
2
% ls -l /dev/hidraw1
crw------- 1 root root 240, 1 Apr 22 20:28 hidraw1
/dev
ディレクトリ以下にはデバイスファイルが格納されていますが, /dev/hidraw
は上記コマンドで一列目にc
という文字があることから, /dev
にキャラクタデバイスとして格納されていることがわかります.
キャラクタデバイスとは, データの入出力をバイト(1文字)単位で扱うデバイスです. キャラクタデバイスファイルを介して, アプリケーションはバッファリングなしで直接デバイスとデータを交換できるため, 逐次的でリアルタイムなデータ処理が可能となります. キーボードやマウスがキャラクターデバイスの代表例です.
References
(注意:GitHub Accountが必要となります)