Skip to content

Latest commit

 

History

History
113 lines (73 loc) · 5.09 KB

File metadata and controls

113 lines (73 loc) · 5.09 KB

copilot2ctrl

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.ko

sudo 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 copilot2ctrl

sudo 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]
Loading

注意点

セキュアブート

Copilot+ PCを含む多くの最新PCではセキュアブートがデフォルトで有効になっています。セキュアブートが有効な状態では、署名されていないカーネルモジュールをロードしようとするとエラーが発生します。BIOS/UEFI設定でセキュアブートを無効にするか、MOK (Machine Owner Key) を作成してモジュールに署名を行い、システムに登録する必要があります。

カーネル更新時

カーネルバージョンを新しいものに更新した場合、カーネルモジュールは再ビルド(make および sudo make install)が必要です。