web-dev-qa-db-ja.com

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

最近、Scroll Lockキーを使用してバックライトを切り替えるように設計されたバックライト付きキーボードを購入しました。すぐに、Scroll Lockキーを押してもシナモンが適切に反応しないことに気づきました。当初、キーボードのバックライトはDOAだと思っていました。再起動後、Xorgを起動する前に、Scroll Lockキーを使用してバックライトを正常に切り替えることができたことがわかりました。次に、Xorg(およびその結果としてcinnamon_session)を起動した後、この機能は再び機能しなくなりました。

Xorgの起動後にバックライトを機能させるために、次のように強制されました:xset led named "Scroll Lock"この機能を有効または無効にします。

少し調べた後、私は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との契約は何ですか?

13
sherrellbc

私はCinnamonに詳しくありませんが、Scroll Lockキーを有効にできるはずです。

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

xmodmap -pm

現在の修飾子設定のリストが出力されます。うまくいけば、これらの行の1つにはキーがリストされません。通常はmod3になります。その場合は、次のコマンドでスクロールロックを有効にできます。

xmodmap -e "add mod3 = Scroll_Lock"

Scroll Lock LEDがScroll Lockキーを押したときに応答するようになります。

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

しかし、私は自分の前でこれを行ったことがないので、詳細を説明する前にテストすることをお勧めします。 :)

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

次の行を含む.Xmodmapというファイルをホームディレクトリに作成します。

add mod3 = Scroll_Lock

これを行う最も簡単な方法は次のとおりです。

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

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

10
PM 2Ring

恒久的な方法が見つかりました 長い夜の後で、焼きたての溶液がたくさんありました。

# 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/*
7
Pykler

なので Scroll Lock アクティブな場合、キーボードショートカットに干渉する可能性があります(名前 F12、 Ctrl+Space 期待どおりに動作しません)、私は一致することにしました Scroll Lockxsetを手動で起動するためのキー。以前の状態に関する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を実行する必要があります。この場合、上記のスクリプトを書き直してください。


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

enter image description here

2
sequielo