(問題の重要な新しい情報を編集した後)
コマンドラインからディスプレイをオフにxrandr --output ... --off
してから再びオンにした後(xrandr --output ... --auto
)Xデスクトップから文字コンソールに切り替える機能が失われました(つまり、alt / ctrl / f1は機能しなくなりました)。
他のXコントロールショートカット(alt / ctrl / backspace)は引き続き機能します。
なぜ?この機能を再度有効にするにはどうすればよいですか?
情報:最新の安定版であるLinux Mint。明らかに、問題はコマンドラインを使用してXを閉じてからxrandr --output ... --off
翌朝に再び開いたときに発生しました(コマンドを使用)。xrandr --output ... --auto
家に帰る前に電源を完全に切る必要があり、通常の設定(コントロールパネルのどこかにあるエネルギー設定)が不足しているか問題があるため、これを使用してください。
私のキーボードは大丈夫です。たとえば、xev
alt/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スクリプトを作成しましたalt。F1スクリプトを実行すると、問題なくtty1に送信されます。
キーボードが機能していることを再確認/検証するために、コンピュータでこのスクリプトを実行してtty1に接続していることを確認することもできます。
https://github.com/gevasiliou/PythonTests/blob/master/pykey-test.py
PS:スクリプトの代わりにこれを実行すると、#chvt 1
tty1に送信されます。
Ctrlいくつかの調査の後、他のユーザーはxserverの更新(明らかに)によってttyに適用されたいくつかの解像度設定が修正され、++キーが機能しなくなったと報告しました。altfn
例えばこの記事では、起動中にvga = 0x0362などの特定のvga解像度をカーネルパラメータ(vga = mode)として適用することで問題を解決しました。明らかに、システムアップデートの1つがその人のための解決策を台無しにしたので、おそらくあなたの場合もそうです(理由は神だけが知っているでしょう)。
PS:システムでサポートされている利用可能なモードを表示するには、リストされているモードのhwinfo --framebuffer | grep 'Mode'
いずれかを実行して選択する必要があります。
ところで、F3質問にxev withの一部を含めましたが、結果は何ですかF1?
修正する:
さらなるトラブルシューティングのために、以下のいくつかを試してみる価値があります。
見ている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 "自動化" が正常に動作しない場合)。
- これにコンソールのカーネル文書、ディレクトリで仮想コンソール操作に使用できるドライバ/サポートモジュールを確認できます
/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
- 最後に、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
)