
Xスクリーンライブラリは素晴らしいですが、時には他のTTYで開かれたコンテンツをロックしたい場合があります。このため、私はvlock -a
すべてのTTYを同時にロックしたいと思います。ただし、このコマンドを実行しようとすると、通常はXセッションにあります。
vlock
現在、端末が仮想コンソールではないと文句を言うので、X内で実行することはできません。私はいくつかの解決策を見つけようとしましたが、chvt
そのコンソールでコマンドを実行する方法がわかりません。
Xを終了せずにすべてのTTYをロックするにはどうすればよいですかvlock
? (使用することが望ましいですが、他の提案も可能です)
答え1
次のコマンドラインオプションを参照してください。
-n,--new
Switch to a new virtual console before locking all console sessions.
私が常にやっていることは、sudo vlock -ans
Xorgの内部/外部で作業することです。
ロックを解除すると元のVTに戻ります。
編集する
残念ながら、Arch Linuxはもともとvlockパッケージをpackageが提供するパッケージに置き換えましたkbd
。これは現在コンソールのみロックされているため、ユーザーには役に立ちません。 (どちらも-a -n -s
サポートしていません。残念ながら)
解決策は難しいかもしれません。元のブロックを手動でインストールし、kbd
アップグレードをブロックする必要があります。pacman.conf
答え2
使わない予定ならvlock
ぜひ見てくださいphyslock
。 Physlockは、ユーザーが探していることを正確に実行します。つまり、新しいVTに切り替えてロックし、コンソール切り替えを無効にします。ロックが解除されると、呼び出したコンソールに戻ります(XまたはTTYから呼び出すことができます)。
オプションが多く、まだ非常に軽いですxautolock
。
答え3
長すぎます。あなたのアイデアchvt
はほとんどここにコマンドラインがあります
sudo openvt -s -- sudo -u "$(whoami)" "$SHELL" -c \
'vlock -a; chvt '"$(sed 's/^tty//' < /sys/devices/virtual/tty/tty0/active)"
openvt -s/--switch
新しく開かれたttyでvlockを実行し、以前に検出されたtty /sys/devices/virtual/tty/tty0/active
(つまり、Xを実行しているtty)のロックを解除してから切り替えます。
とても長い話
そして質問のタイトル
XのVTを変更せずにus[e] vlock
変更を防ぐための回答が必要だと提案しているようですvt
/tty
まだその機能を望んvlock -a
で使用してみているようですchvt
。この答えは元のアイデアに従う解決策を提供しますchvt
。
# get the currently active tty
# (via https://unix.stackexchange.com/q/554600/24394)
ACTIVE_TTY="$(cat /sys/devices/virtual/tty/tty0/active)"
# get current user
ACTIVE_USER="$(whoami)"
# get the current shell or fallback
test -x "$SHELL" && ACTIVE_SHELL="$SHELL" || ACTIVE_SHELL="/bin/bash"
# 1. sudo open and switch to new tty
# 2. sudo run as ACTIVE_USER the ACTIVE_SHELL with
# 3. vlock -a to lock down
# 4. and upon unlock print unlocked and
# 5. switch back to previous shell
sudo openvt --switch --\
sudo -u "$ACTIVE_USER" "$ACTIVE_SHELL" -c \
'vlock -a; echo unlocked; chvt '"${ACTIVE_TTY/tty/}"
sudo openvt --switch -- sudo -u "$(whoami)" "$SHELL" -c 'vlock -a; chvt '"$(sed 's/^tty//' < /sys/devices/virtual/tty/tty0/active)"