私のCtrl + sキーを奪ったことは何ですか?

私のCtrl + sキーを奪ったことは何ですか?

私はLinux Mint 18.1 KDE(Plasma 5.8.5、Qt 5.6.1)にアップグレードしましたが、以前に経験していなかった奇妙な問題を除いて、すべてがうまくいっています。 Xウィンドウレベルでは、私の「Ctrl + s」シーケンスがアプリケーションレベルに達しないため、何かをキャプチャしています。たとえば、「Ctrl + s」または「Ctrl + x Ctrl + s」標準のemacsキーは機能しません。より一般的なKDEプログラムでも「Ctrl + s」の順序が壊れています。私はこれがKDEフレームワークかもしれないと思いますが、Ctrl + sに定義されたグローバルショートカットはありません(グローバルCtrl + sをCtrl + Shift + sに移動しました)

これは着信音です。 「Ctrl+s」シーケンスのみが終了しました。私が知っている限り、他のすべてのキーは期待どおりに動作します。

実行により、何が起こっているのかについていくつかの手がかりを得ることができますxev。 Ctrl+s と入力すると、次のシーケンスが生成されます。

KeyPress event, serial 40, synthetic NO, window 0x3400001,
    root 0x4c4, subw 0x0, time 14783934, (-711,685), root:(1159,750),
    state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

FocusOut event, serial 40, synthetic NO, window 0x3400001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 40, synthetic NO, window 0x3400001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 40, synthetic NO, window 0x0,
    keys:  2   0   0   0   4294967200 0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeyRelease event, serial 40, synthetic NO, window 0x3400001,
    root 0x4c4, subw 0x0, time 14784998, (-711,685), root:(1159,750),
    state 0x4, keycode 39 (keysym 0x73, s), same_screen YES,
    XLookupString gives 1 bytes: (13) ""
    XFilterEvent returns: False

KeyRelease event, serial 40, synthetic NO, window 0x3400001,
    root 0x4c4, subw 0x0, time 14785566, (-711,685), root:(1159,750),
    state 0x4, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

これは、Ctrl + yなどのキーを押すのとはまったく異なります。 Ctrl+s シーケンスは、重要な問題「FocusOut」と「FocusIn」を生成します。これは、一部のプロセス(おそらくKDEウィンドウマネージャ)がシーケンスを取得していることを示します。しかし、私はどのプロセスが鍵を握っているかを判断することはできません。

私の理論はshowkey -aこれを端末で実行することによって確認されました。これは、アプリケーションレベルがCtrl + sを受け取らないことを明確に確認します。たとえば、他のすべてのCtrl +はキーコードを提供します。

^Y       25 0031 0x19
^R       18 0022 0x12
^T       20 0024 0x14
^T       20 0024 0x14

ただし、Ctrl + sと入力しようとすると何も起こりません。

さらに、私はKDEでCtrl + sにマップされたグローバルショートカットがなく、Ctrl + sが実際に何もしないことを2回(3回)確認しました。 /dev/nullに直接送信されるようです...

私も試しました

xdotool keydown Ctrl+s;xdotool key XF86LogGrabInfo; xdotool keyup Ctrl+s;

どのプロセスがCtrl + sキーを保持しているかを確認できることを確認してください。ただし、ログではそのようなプロセスを識別できません。

誰かが次にどこに行くべきかを知りたいと思って、アイデアが枯渇し始めました。

答え1

Xorg.0.logより詳細な分析から、このプロセスはCtrl+sWayland / KDEグローバルショートカットマネージャプロセスで使用されることがわかりました。kglobalaccel5

しかし、グローバルショートカットとして定義されたキーがないことがわかっているので、Ctrl+s唯一の解決策はこれがキーマッピングの競合(またはむしろキーコードの競合)であることです。

(いくつかの試行錯誤テストを経た後)私のキーボードで生成されたキーイベントは(「ダッシュボードウィジェット」を開くためにマッピングされた)イベントと同じであることがわかりCtrl+§ました。Ctrl+sCtrl+§

おそらく、「rapoo」クイックタイピングキーボードに固有のキーマップではなく、通常のキーマップを使用している可能性があります。鍵と修飾子の相互作用がどのようにこの衝突を引き起こすかについての詳細な知識はありません。通常のキー(「s」や「§」など)は単独で機能しますが、「Ctrl」修飾子と一緒に使用すると同じコード値を提供します。

解決策はグローバルマッピングを削除することです。Ctrl+§

興味深い質問です!

関連情報