
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) 를 잠금 해제한 후 다시 전환하는 데 사용됩니다 .
아주 긴 이야기
그리고 질문 제목
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)"