X:xrandrを使用してモニターをオフにしてから再びオンにすると、alt / ctrl / f1は機能しなくなります。

X:xrandrを使用してモニターをオフにしてから再びオンにすると、alt / ctrl / f1は機能しなくなります。

(問題の重要な新しい情報を編集した後)

コマンドラインからディスプレイをオフにxrandr --output ... --offしてから再びオンにした後(xrandr --output ... --auto)Xデスクトップから文字コンソールに切り替える機能が失われました(つまり、alt / ctrl / f1は機能しなくなりました)。

他のXコントロールショートカット(alt / ctrl / backspace)は引き続き機能します。

なぜ?この機能を再度有効にするにはどうすればよいですか?


情報:最新の安定版であるLinux Mint。明らかに、問題はコマンドラインを使用してXを閉じてからxrandr --output ... --off翌朝に再び開いたときに発生しました(コマンドを使用)。xrandr --output ... --auto

家に帰る前に電源を完全に切る必要があり、通常の設定(コントロールパネルのどこかにあるエネルギー設定)が不足しているか問題があるため、これを使用してください。

私のキーボードは大丈夫です。たとえば、xevalt/ctrl/f3 が表示されます。解放するイベントは正しいです。

KeyRelease event, serial 37, synthetic NO, window 0x3c00001,
    root 0x2e1, subw 0x0, time 1622285717, (99,77), root:(961,532),
    state 0xc, keycode 69 (keysym 0x1008fe03, XF86Switch_VT_3), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

しかし、重要なイベントはいいえリストにあります。したがって、xev 見えないalt/ctrl/f3 を押すと何らかのリリースが表示されます。


デバッグ出力:

$ xmodmap -pke|grep -i xf86switch
keycode  67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1 F1 F1 XF86Switch_VT_1
keycode  68 = F2 F2 F2 F2 F2 F2 XF86Switch_VT_2 F2 F2 XF86Switch_VT_2
keycode  69 = F3 F3 F3 F3 F3 F3 XF86Switch_VT_3 F3 F3 XF86Switch_VT_3
keycode  70 = F4 F4 F4 F4 F4 F4 XF86Switch_VT_4 F4 F4 XF86Switch_VT_4
keycode  71 = F5 F5 F5 F5 F5 F5 XF86Switch_VT_5 F5 F5 XF86Switch_VT_5
keycode  72 = F6 F6 F6 F6 F6 F6 XF86Switch_VT_6 F6 F6 XF86Switch_VT_6
keycode  73 = F7 F7 F7 F7 F7 F7 XF86Switch_VT_7 F7 F7 XF86Switch_VT_7
keycode  74 = F8 F8 F8 F8 F8 F8 XF86Switch_VT_8 F8 F8 XF86Switch_VT_8
keycode  75 = F9 F9 F9 F9 F9 F9 XF86Switch_VT_9 F9 F9 XF86Switch_VT_9
keycode  76 = F10 F10 F10 F10 F10 F10 XF86Switch_VT_10 F10 F10 XF86Switch_VT_10
keycode  95 = F11 F11 F11 F11 F11 F11 XF86Switch_VT_11 F11 F11 XF86Switch_VT_11
keycode  96 = F12 F12 F12 F12 F12 F12 XF86Switch_VT_12 F12 F12 XF86Switch_VT_12

このコマンドはxmodmap -pke | grep ' F[0-9]\+'まったく同じ結果を提供します。


追加情報:終了時にキャラクタコンソールに切り替える機能は失われますが、起動時には失われません(したがって、コマンドを入力するには電話機からワークステーションでsshを実行する必要がありますxrandr --output ... --auto)。


スクリプトテスト:@GeorgeVasilouのスクリプトを試してみました。スクリプト、X11イベントを挿入してキーボードクリックをシミュレートします。結果は否定的です。シミュレートされたalt / ctrl / f1シーケンスは単一のシーケンスとしてのみ表示されますH

答え1

これは答えではなく拡張されたコメントです。

私のシステムでは、Ctrl++がAlt正常に動作します。 KeyPressイベントは発生しますF1が、KeyPressイベントは発生しません。 tty1に移動したので動作することを知っていますが。controlaltF1

私の例の完全な出力は次のとおりですxev(比較用)。

root@debi64:/home/gv/Desktop/PythonTests# xev -event keyboard
Outer window is 0x4400001, inner window is 0x4400002

KeymapNotify event, serial 18, synthetic NO, window 0x0,
    keys:  4294967192 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   0   0   0   0   

KeyPress event, serial 25, synthetic NO, window 0x4400001,
    root 0x281, subw 0x0, time 11550957, (157,186), root:(748,462),
    state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 28, synthetic NO, window 0x4400001,
    root 0x281, subw 0x0, time 11550960, (157,186), root:(748,462),
    state 0x8, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 28, synthetic NO, window 0x4400001,
    root 0x281, subw 0x0, time 11553775, (157,186), root:(748,462),
    state 0xc, keycode 67 (keysym 0x1008fe01, XF86Switch_VT_1), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 28, synthetic NO, window 0x4400001,
    root 0x281, subw 0x0, time 11553902, (157,186), root:(748,462),
    state 0xc, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 28, synthetic NO, window 0x4400001,
    root 0x281, subw 0x0, time 11553902, (157,186), root:(748,462),
    state 0x8, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeymapNotify event, serial 28, synthetic NO, window 0x0,
    keys:  4294967169 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   0   0   0   0   

ClientMessage event, serial 28, synthetic YES, window 0x4400001,
    message_type 0x11b (WM_PROTOCOLS), format 32, message 0x119 (WM_DELETE_WINDOW)

Ctrl私はまた+キーを押すことをシミュレートするために小さなPythonスクリプトを作成しましたaltF1スクリプトを実行すると、問題なくtty1に送信されます。

キーボードが機能していることを再確認/検証するために、コンピュータでこのスクリプトを実行してtty1に接続していることを確認することもできます。

https://github.com/gevasiliou/PythonTests/blob/master/pykey-test.py

PS:スクリプトの代わりにこれを実行すると、#chvt 1tty1に送信されます。

Ctrlいくつかの調査の後、他のユーザーはxserverの更新(明らかに)によってttyに適用されたいくつかの解像度設定が修正され、++キーが機能しなくなったと報告しました。altfn

例えばこの記事では、起動中にvga = 0x0362などの特定のvga解像度をカーネルパラメータ(vga = mode)として適用することで問題を解決しました。明らかに、システムアップデートの1つがその人のための解決策を台無しにしたので、おそらくあなたの場合もそうです(理由は神だけが知っているでしょう)。

PS:システムでサポートされている利用可能なモードを表示するには、リストされているモードのhwinfo --framebuffer | grep 'Mode'いずれかを実行して選択する必要があります。

ところで、F3質問にxev withの一部を含めましたが、結果は何ですかF1

修正する:
さらなるトラブルシューティングのために、以下のいくつかを試してみる価値があります。

  1. 見ているxrandr ソースコード--off オプションは、次のコマンドを実行するようです。

    set_name_xid (&config_output->mode, None);
    set_name_xid (&config_output->crtc, None);
    config_output->changes |= changes_mode | changes_crtc;
    

--auto の代わりに --mode および --crtc xrandr オプションを指定して --output を再度有効にすることができます (xrandr "自動化" が正常に動作しない場合)。

  1. これにコンソールのカーネル文書、ディレクトリで仮想コンソール操作に使用できるドライバ/サポートモジュールを確認できます /sys/class/vtconsole
    起動中と終了後は、すべてのファイル/モジュールの値を比較でき、動作が異なります。おそらく、終了時間中にこの値を変更することがあります。

以下は、tty1-2-3-4-5-6に切り替えると正常に動作する私のシステムの出力です。

root@debi64:/home/gv/Desktop/PythonTests# for f in $(find /sys/class/vtconsole/vtcon0/ -type f);do echo -e "File : $f \c\c\c";echo -e "-VALUE : \c";cat $f;done
File : /sys/class/vtconsole/vtcon0/bind -VALUE : 0
File : /sys/class/vtconsole/vtcon0/power/runtime_active_kids -VALUE : 0
File : /sys/class/vtconsole/vtcon0/power/runtime_suspended_time -VALUE : 0
File : /sys/class/vtconsole/vtcon0/power/autosuspend_delay_ms -VALUE : cat: /sys/class/vtconsole/vtcon0/power/autosuspend_delay_ms: Input/output error
File : /sys/class/vtconsole/vtcon0/power/runtime_enabled -VALUE : disabled
File : /sys/class/vtconsole/vtcon0/power/runtime_active_time -VALUE : 0
File : /sys/class/vtconsole/vtcon0/power/control -VALUE : auto
File : /sys/class/vtconsole/vtcon0/power/async -VALUE : disabled
File : /sys/class/vtconsole/vtcon0/power/runtime_usage -VALUE : 0
File : /sys/class/vtconsole/vtcon0/power/runtime_status -VALUE : unsupported
File : /sys/class/vtconsole/vtcon0/uevent -VALUE : 
File : /sys/class/vtconsole/vtcon0/name -VALUE : (S) VGA+
root@debi64:/home/gv/Desktop/PythonTests# for f in $(find /sys/class/vtconsole/vtcon1/ -type f);do echo -e "File : $f \c\c\c";echo -e "-VALUE : \c";cat $f;done
File : /sys/class/vtconsole/vtcon1/bind -VALUE : 1
File : /sys/class/vtconsole/vtcon1/power/runtime_active_kids -VALUE : 0
File : /sys/class/vtconsole/vtcon1/power/runtime_suspended_time -VALUE : 0
File : /sys/class/vtconsole/vtcon1/power/autosuspend_delay_ms -VALUE : cat: /sys/class/vtconsole/vtcon1/power/autosuspend_delay_ms: Input/output error
File : /sys/class/vtconsole/vtcon1/power/runtime_enabled -VALUE : disabled
File : /sys/class/vtconsole/vtcon1/power/runtime_active_time -VALUE : 0
File : /sys/class/vtconsole/vtcon1/power/control -VALUE : auto
File : /sys/class/vtconsole/vtcon1/power/async -VALUE : disabled
File : /sys/class/vtconsole/vtcon1/power/runtime_usage -VALUE : 0
File : /sys/class/vtconsole/vtcon1/power/runtime_status -VALUE : unsupported
File : /sys/class/vtconsole/vtcon1/uevent -VALUE : 
File : /sys/class/vtconsole/vtcon1/name -VALUE : (M) frame buffer device
  1. 最後に、Xserverなどの可能な自動スリープ機能を確認することをお勧めします。DPMS長期間使用しないと自動的に有効になる設定です。

2番目のアップデート:

周りを見回すと、仮想端末のDPMSやその他の便利な省電力関連の設定をsettermコマンドで制御できることがわかりました。仮想端末が眠っているように見える場合は、setterm --resetコマンドを送信して起動することができます(この場合)。通常のtty7から別のttyにコマンドを送信するには、次のものを使用する必要があります。 setsid bash -c 'exec setterm --reset <> /dev/tty1 >&0 2>&1'
唯一の問題は、tty1にログインする必要があることです。

setsid bash -c 'exec setterm --reverse on <> /dev/tty1 >&0 2>&1'テストのために動作中にtty1を使用することができ、tty1に切り替えることでchvt 1結果を観察できます(ターミナルで色を逆に置き換えます - Debianでテストされ、動作します)。

setterm --powersave offまた、settermは、などを使用して省電力を有効/無効にするオプションも提供します。 (参照man setterm

関連情報