Cinnamon / Linux / XorgでScroll Lockキーが無効になっているのはなぜですか?


13

最近、Scroll Lockキーを使用してバックライトを切り替えるように設計されたバックライト付きキーボードを購入しました。Scroll Lockキーを押したときにCinnamonが適切に応答しないことがすぐにわかりました。元々、キーボードのバックライトはDOAであると思っていました。それは、他のすべてが箱から出して機能したからです。再起動後、Xorgを起動する前に、Scroll Lockキーを使用してバックライトを正常に切り替えることができました。その後、もう一度、Xorg(および結果的にcinnamon_session)を開始した後、この機能は再び機能しなくなりました。

Xorgの起動後にバックライトを機能させるために、xset led named "Scroll Lock"この機能を有効または無効にするためにa:を発行する必要がありました。

少し調査した後、xev開始後にキーイベント情報を端末にダンプするというプログラムに出会いました。Scroll Lockキーを押すと、端末に次の情報が入力されました。

KeyPressイベント、シリアル34、合成NO、ウィンドウ0x2c00001、ルート0x2df、subw 0x0、時間2609824、(410,0)、ルート:(1724,142)、状態0x0、キーコード78(keysym 0xff14、Scroll_Lock)、same_screen YES、 XLookupStringは0バイトを与えます:XmbLookupStringは0バイトを与えます:XFilterEventは以下を返します:False

KeyReleaseイベント、シリアル37、合成NO、ウィンドウ0x2c00001、ルート0x2df、subw 0x0、時間2609912、(410,0)、ルート:(1724、142)、状態0x0、キーコード78(keysym 0xff14、Scroll_Lock)、same_screen YES、 XLookupStringは0バイトを与えます:

そのため、キーイベントがカーネルに送信されていることがわかります。

また、興味深いことに、ターミナルで(まだXorgまたはCinnamonを起動する前に)Scroll Lockを使用すると、奇妙な動作が見られました。つまり、この時点で私のバックライトは期待どおりに切り替わりましたが、Scroll Lockが有効になっていると、入力したものは何も画面に書き込まれませんでした。Scroll Lockを無効にした後、私が書いたものはすべて、以前にバッファリングされていたかのように、すぐに端末にダンプされました。

tl; dr Scroll LockとXorgの取り決めは何ですか?


@sherrellbcでこの問題を解決する運はありますか?
ピクラー

回答:


10

私はCinnamonに慣れていませんが、Scroll Lockキーを有効にできるはずです。

まず、予備のキーボード修飾子スロットがあるかどうかを確認する必要があります。実行:

xmodmap -pm

これにより、現在の修飾子の設定のリストが印刷されます。うまくいけば、これらの行の1つにキーがリストされていないことを願っています。一般的にはmod3。その場合、次のコマンドでScroll Lockを有効にできます。

xmodmap -e "add mod3 = Scroll_Lock"

Scroll Lock LEDは、Scroll Lockキーの押下に応答するはずです。

それが機能する場合は、おそらくXが起動するたびにXに自動的に実行させたいと思うでしょう。それを行うにはさまざまな方法があります:ユーザーごとに行うことができますが、このようなことはグローバルに設定するのが理にかなっていると思います。

しかし、私は自分でこれをやったことがないので、詳細を説明する前にテストした方が良いでしょう。:)

OK。そのmodmapをグローバルにアクティブ化しようとした方法は、KDEでは機能しません。:(しかし、私のホームディレクトリでそれを有効にするとうまくいくようです。

.Xmodmap次の行を含むホームディレクトリで呼び出されるファイルを作成します。

add mod3 = Scroll_Lock

最も簡単な方法は次のとおりです。

cd ~
echo >.Xmodmap "add mod3 = Scroll_Lock"

Xを再起動します(ログアウトして再度ログインします)。うまくいけば、Scroll Lockキーが機能するようになります。そうでない場合は、お知らせください。


.Xmodmapの設定はUbuntu 16.04 / Unityでは機能しませんでしたが、Pyklerの答えの永続的な解決策は機能しました:)
Nebel54

7

長い夜を過ごした後、多くの半分焼いたソリューションで恒久的な方法を見つけました

# backup your symbols file
sudo cp /usr/share/X11/xkb/symbols/us{,.distribution} 

xkb_symbols "basic" {セクションに次の行を追加します。その2行目が存在しない場合でも心配しないでください。一部の言語でのみ存在し、システム上では存在しません。

...
    modifier_map Mod3   { Scroll_Lock }; <==<< Add this line

    include "level3(ralt_switch)" <==<< before this line
};

言語を切り替える場合、他のレイアウトでも同じ操作を行う必要がある場合があります

また、xkbレイアウトが存在するキャッシュがあります。Xサーバーを再起動する前にこれをクリアして、新しいキーボードシンボルファイルを確認する必要があります。

sudo rm -f /var/lib/xkb/*

これは素晴らしいことですが、私にとってはaskubuntu.com/a/1067921/274298に記載されているgsettingsの変更とxkboptionsの変更と一緒にしか機能しませんでした。
ペシュー

2

Scroll Lockアクティブな(という名前のとき、キーボード・ショートカットを妨げる可能性F12Ctrl+ Space期待通りに動作しません)、私が一致することを決めたScroll Lockの手動起動にキーをxsetそれ以前の状態に関するLEDの状態を切り替えます。

という名前の実行可能スクリプトを作成しましたtoggle_keyb_led.sh

xset q | awk '/LED/{ if ($10 ~ "00000000") print "led"; else print "-led" }' | xargs xset

これは、の出力を解析し、次xset qの行と一致しますLED maskます。

注1:あなたのために動作しない場合は、と確認してくださいxset -led; xset q | grep 'LED'は、現在のマスク値て。

注2:一部のユーザーはxset led 3、ライトをアクティブにするために実行する必要があります。この場合、上記のスクリプトを書き換えてください。


次に、次のようなデスクトップ環境を使用して、このスクリプトをカスタムショートカットとして起動できます(Cinnamonの場合)。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.