udevを使用したソリューション
HALは非推奨になり、udev
現在使用されているので、このアプローチは他の回答よりも優先されます(ただし、HALを使用したソリューションの方が簡単だと思います)。
ただし、多くのファンクションキーでは、[システム設定]> [キーボード]> [ショートカット]を使用してスクリプトをバインドできます。まずこれを試してください。それはあなたに多くのトラブルを救います。たとえば、明るさのキーはこれでは機能しません(理由がわかりません)。たとえば、明るさのキーの動作を変更する方法を知りたい場合は、このまま読み進めてください。
注:Samsungノートブックを実行している場合はsamsung-tools
、http: //www.voria.org/forum/からパッケージをインストールすることにより、すべての(モデルに応じて)ファンクションキーを修正できます。
このハウツーは、ターミナルの使い方を知っていることを前提としており、vim
エディタを使用しています。わからない場合vim
は、コマンドでgedit
またはに置き換えてくださいnano
。
キーボードを決定する
/lib/udev/findkeyboards
私の場合、コンピュータに接続されているキーボードを印刷する必要があります
USB keyboard: input/event9
USB keyboard: input/event7
AT keyboard: input/event4
現在、2つのオプションがあります。
USBキーボード:USBキーボード
を再マップする場合は、実行してそれらを検査します
udevadm info --export-db | awk '/event9/' RS="" | grep -P 'ID_(VENDOR|MODEL)(?!_ENC)'
awkステートメントの9を正しい番号に置き換える必要があります。出力は次のようになります
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
これは、私のキーボードがLogitech USBレシーバーを介して処理されていることを正しく示しています(input / event7は、いくつかのプログラム可能なボタンを持つLogitech G9マウスであることが判明しました)。
ラップトップのキーボード:ラップトップのキーボード
を再マップするAT keyboard
場合、私の場合は4の番号を覚えておく必要があります。ラップトップのdmi情報も取得します。
cat /sys/class/dmi/id/sys_vendor
私の場合は
SAMSUNG ELECTRONICS CO., LTD.
そして
cat /sys/class/dmi/id/product_name
私の場合は
305U1A
ファンクションキーの現在のマッピングを確認する
これで、キーボードを聞いて現在のキーマッピングを判別できます(正しい番号を挿入)
sudo /lib/udev/keymap -i input/event4
このコマンドEscは、キーボードのCtrl+ またはc別のキーボードの+ を使用して終了できます。
画面が激しく下にスクロールし始めた場合は、+ を数回押してEsc、Ctrlc
sudo /lib/udev/keymap -i input/event4 2> /dev/null
または、まだスクロールの問題がある場合
sudo /lib/udev/keymap -i input/event4 > ~/keymap.log
最後のケースでは、引き続きスクロールしますが、ファンクションキーを押すと、~/keymap.log
後で読むことができる場所に移動するはずです。
これで、ファンクションキーを押して現在のマッピングを確認できます。これにより、(これが私のFn+ F1からFn+のような)リストが表示されますF12。
scan code: 0xCE key code: kpplusminus
scan code: 0x89 key code: brightnessdown
scan code: 0x88 key code: brightnessup
scan code: 0x82 key code: switchvideomode
scan code: 0xF9 key code: f23
scan code: 0xA0 key code: mute
scan code: 0xAE key code: volumedown
scan code: 0xB0 key code: volumeup
scan code: 0x43 key code: f9
scan code: 0x44 key code: f10
scan code: 0xB3 key code: prog3
scan code: 0x86 key code: wlan
次に、動作を変更するスキャンコードを書き留めます。
スキャンコードのキーコードを変更する
あなたは、キーコードが表示された場合、明らかにキーを行うことを期待するものカバーしていない、あなたはで見ることができ/usr/include/linux/input.h
下のキーやボタンより良い試合は、あなたが実際に起こるしたいというキーコードがあるかどうかを確認します。そこにあるキーコードはフォーマットでKEY_KEYCODE
ありKEY_
、小文字で後の部分を書き留める必要があります。これを変更するだけで問題を解決できる場合があります。
ただし、輝度キーには多くの場合、適切なキーコードが関連付けられており、これによりそれらを再マッピングできません。したがって、これらを他のキーコードに変更する必要があります。私たちは、使用するprog1
とprog2
、これらは私のコンピュータ上で使用されていないので、しかし、あなたが使用することもでき、この例f13
を通じてf24
、またはf20
を通じてf24
あなたが持っているアップルのキーボードがあればF1を通じてF19キーを。
カスタムキーマップの
作成:/lib/udev/keymaps
適切な名前でディレクトリにキーマップファイルを作成しますls /lib/udev/keymaps
。適切な名前を確認するには、の出力を確認してください。私はcustom-brightness
この質問のために行きます。
sudo vim /lib/udev/keymaps/custom-brightness
変更するキーのスキャンコードを入力し、続けてキーに設定するスキャンコードを入力します。私custom-brightness
はこのように見えます:
# /lib/udev/keymaps/custom-brightness
0x89 prog1
0x88 prog2
カスタムキーリリースファイルを作成します。 ノートパソコンのキーボードを交換している場合のみ:
キーリリースイベントが正しく送信されず、コンピューターがハングすることがあります。これを回避するために、カスタムキーリリースファイルも作成します
sudo vim /lib/udev/keymaps/force-release/custom-brightness
このファイルには同じスキャンコードが含まれている必要があります。
# /lib/udev/keymaps/force-release/custom-brightness
0x89
0x88
新しいマッピングがルールファイルに読み込まれていることを確認する次に、マッピングが読み込まれて
いることを確認する必要があります。編集してこれを行うことができる/lib/udev/rules.d/95-keymap.rules
ので、バックアップを作成するのが賢明です
ここでも2つのオプションがあります。
USBキーボード:USBキーボード
を使用しているため、下にエントリを追加しLABEL="keyboard_usbcheck"
、キーボードメーカーの他のエントリを過ぎている必要があります。これは私のキーボードが
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
すでにルールの1つに一致していますが、それ以外の場合は上書きされます。
次のルールを追加します。ここで、ID_VENDOR_ID
およびID_MODEL_ID
キーマップの名前を適切に変更する必要があります
ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c52b", RUN+="keymap $name custom-brightness"
ノートパソコンのキーボード:
IFが/lib/udev/findkeyboards
通り、ノートパソコンのキーボードを報告しAT keyboard
、あなたのルールが下に行く必要がありLABEL="keyboard_vendorcheck"
そうでない場合は下に置きます、LABEL="keyboard_modulecheck"
。もう一度、ラップトップメーカーのその他のエントリの下に配置します。次のルールを追加します(SAMSUNG ELECTRONICS CO., LTD.
少し長いのでワイルドカードを使用しました)
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keymap $name custom_brightness"
/lib/udev/rules.d/95-keyboard-force-release.rules
バックアップした後、ルールも追加します
sudo cp /lib/udev/rules.d/95-keyboard-force-release.rules /lib/udev/rules.d/95-keyboard-force-release.rules.bak
sudo vim /lib/udev/rules.d/95-keyboard-force-release.rules
もう一度、メーカーの他のエントリの下に追加します
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keyboard-force-release.sh $devpath custom_test"
udevが新しいルール
をロードすることを確認してください。
sudo adevadm trigger
注:(udevadm control --reload-rules
まだ多くのWebサイトで説明されています)は機能しません。
次に、ルールが正常に適用されたかどうかを確認します
sudo /lib/udev/keymap -i input/event4
明るさのキーについて報告するはずです
scan code: 0x89 key code: prog1
scan code: 0x88 key code: prog2
システム設定でキーを再マッピングする
最後のステップで正しいキーコードが報告された場合、どちらかのキーが自動的に機能し始めます(最初に間違ったキーコードがあった場合)。
明るさのために、キーをscripにバインドする必要があります。これは、システム設定>キーボード>ショートカットを使用して可能になりました。
楽しい
注:
キーに間違ったキーコードがあり、この方法で修正された/usr/share/doc/udev/README.keymap.txt.gz
場合は、の手順に従って(を使用して抽出せずにこれを開くことができzless
ます)、そこに記載されているメールアドレスを結果に送信してください。変更は次のリリースに含めることができます。多くのユーザーにメリットがあります!
Vaidas Jablonskisによるこの役立つ投稿に感謝します。