XのVTを変更せずにvlockを使用する

XのVTを変更せずにvlockを使用する

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 -ansXorgの内部/外部で作業することです。

ロックを解除すると元の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)"

関連情報