使用 vlock 而不更改 X 的 VT

使用 vlock 而不更改 X 的 VT

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支持,唉)

解决方法可能很棘手,您必须手动安装原始 vlock,并屏蔽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)后切换回来。

很长的故事

而你的问题的标题

us[e] vlock 而不改变 X 的 VT

似乎表明您需要一个防止更改的答案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)"

相关内容