English | 日本語
Copilotキーを「RightCtrl」キーとして利用するためのLinuxカーネルモジュール
2024年から販売されている「Copilot+ PC」に搭載されているCopilotキーを、RightCtrlキーに変更するLinuxカーネルモジュールです。
Copilotキーはハードウェア的に LeftMeta + LeftShift + F23 というキーコードを同時に送信します。Linuxの主要なキーリマップツール(keyd など)では、この特殊なシーケンスの処理において、他の修飾キー(LeftShiftやLeftMeta)と組み合わせた同時押しが正しく機能しない場合があります。
copilot2ctrl はカーネルレベルでこのシーケンスを正確に検知・置換することで、修飾キーとの同時押しを含む、完全なRightCtrlとしての動作を実現します。
- Copilotキー由来の入力のみをRightCtrlキーに置換します。
- LeftShift + Copilot(RightCtrl) + V 等のショートカットに対応できます。
- ユーザ空間で稼働するプロセスがありません。
ビルドには、実行中のカーネルに対応したヘッダファイルとビルドツールが必要です。UbuntuやDebianでは、次のようにするとインストールできます。
sudo apt update
sudo apt install build-essential linux-headers-$(uname -r)カーネルモジュールをビルドするには、次の要領でリポジトリをクローンし、カーネルモジュールをコンパイルします。
git clone https://github.com/penguin2716/copilot2ctrl.git
cd copilot2ctrl
makeカーネルモジュールをロードすると、CopilotキーがRightCtrlキーとして機能するようになります(永続化されないため、PCを再起動すると元の状態に戻ります)。
sudo insmod copilot2ctrl.kosudo dmesg で確認すると、次のようなログが表示されているはずです。 copilot2ctrl virtual keyboard は、このモジュールが内部的に利用している仮想キーボードです。
[195385.876102] copilot2ctrl: connected
[195385.876172] input: copilot2ctrl virtual keyboard as /devices/virtual/input/input74
[195385.876241] copilot2ctrl: module loaded
元の挙動に戻すには、カーネルモジュールをアンロードします。
sudo rmmod copilot2ctrlsudo dmesg で確認すると、次のようなログが表示されているはずです。
[196447.947218] copilot2ctrl: disconnecting
[196447.985456] copilot2ctrl: module unloaded
次のコマンドを実行すると、ビルドしたカーネルモジュールが /lib/modules/$(uname -r)/extra に配置され、また /etc/modules-load.d/copilot2ctrl.conf が作成されて起動時に自動でモジュールがロードされるようになります。
sudo make installアンインストールするには次のコマンドを実行します。 /lib/modules/$(uname -r)/extra/copilot2ctrl.ko と /etc/modules-load.d/copilot2ctrl.conf が削除されます。
sudo make uninstall起動中のカーネルとは異なるバージョンのカーネルで起動している場合、 /lib/modules/<version>/extra/copilot2ctrl.ko ファイルを手動でファイルを削除してください。
Copilotキーは、LeftMeta + LeftShift + F23を送信します。copilot2ctrlは、物理キーボードから送信されたすべてのイベントをキャプチャし、モジュール内で用意する仮想キーボード経由でOSに送信します(この仕組み自体はkeydと類似しています)。キャプチャしたシーケンスがCopilotキーの組み合わせだった場合、仮想キーボードからRightCtrlとしてキーイベントを発行します。
flowchart TD
kbd[物理キーボード]
module[copilot2ctrl.ko]
vkbd[仮想キーボード]
os[Operating System]
kbd -- LeftMeta + LeftShift + F23 --> module
module -- RightControl --> vkbd
vkbd --> os[Operating System]
Copilot+ PCを含む多くの最新PCではセキュアブートがデフォルトで有効になっています。セキュアブートが有効な状態では、署名されていないカーネルモジュールをロードしようとするとエラーが発生します。BIOS/UEFI設定でセキュアブートを無効にするか、MOK (Machine Owner Key) を作成してモジュールに署名を行い、システムに登録する必要があります。
カーネルバージョンを新しいものに更新した場合、カーネルモジュールは再ビルド(make および sudo make install)が必要です。