恢复时锁定虚拟终端

恢复时锁定虚拟终端

许多屏幕储物柜(我的是i3锁)不阻止访问其他虚拟终端。这意味着,如果我在某个 VT 中打开会话,那么即使桌面被锁定(例如恢复时),恶意人员也可以切换到 VT 并执行任何操作。

这对我来说是一个实际问题,因为我偶尔会切换到 VT,然后切换回图形环境并忘记从 VT 注销。

那么问题是:如何在现有屏幕锁上添加 VT 锁定?

Arch Linux wiki 建议简单地从 Xorg 禁用 VT,使用 X 服务器的以下配置:

Section "ServerFlags"
    # disable VT switching:
    Option "DontVTSwitch" "True"
    # disable “zapping”, ie. killing the X server with Ctrl-Alt-Bksp:
    Option "DontZap"      "True"
EndSection

这不是一个选项,因为我使用 VT,如上所述。也许一种解决方案是动态设置和重置这些选项,但我发现没有什么可以在运行时更改 X 服务器选项,至少在一般情况下(有setxkbmap键盘布局或xset其他内容之类的东西)。这可能吗?

我还发现了该命令vlock -a,当从基于文本的 VT 调用时,该命令会锁定会话并禁用 VT 切换。但是,它无法在图形环境中工作,并且无论如何对于图形屏幕锁定器来说都是多余的。

我怎么解决这个问题?

答案1

我用一种不太优雅的方式做到了这一点:首先,更改为第一个终端chvt(这就是我的储物柜将运行的地方),然后在名为 after 的单元中禁用with的slock键,并在 after 后启用它们,然后它似乎工作正常。F1F12xmodmapsystemdsleep.targetresume.target

  • systemd单元:
    [Unit]  
    Description=Disable Switching VTS when locked  
    Before=sleep.target
    
    [Service]  
    User=root  
    Type=forking  
    Environment=DISPLAY=:0  
    ExecStartPre=chvt 1  
    ExecStart=/path/to/disableVTS.sh
    
    [Install]  
    WantedBy=sleep.target
    
  • disableVTS.sh脚本:
    #!/bin/sh  
    xmodmap -e 'keycode 67 ='  
    xmodmap -e 'keycode 68 = '  
    

答案2

vlock延迟使用对我有用。

Ctrl我的 X 服务器已经在运行,用- Alt-切换到 VT-1 F1,运行,然后用-sleep 3; vlock -a切换回 VT-7 。AltF7

第一次,我切换回 VT-7 的速度不够快,不得不解锁并重试。我第二次尝试就成功了,X 出现并正常工作。尝试切换回 VT-1 会出现一个锁定的终端,除非您将其解锁,否则您无法切换出去。

不要尝试后台vlock- 我收到了无限循环的消息,直到我退出该会话。

也许只放入随后执行的vlock -a自定义startx脚本/usr/bin/startx就可以实现自动化。我想在脚本中包含延迟不会有帮助,除非它可以并行或后台运行(不确定我是否想再次尝试vlock)。

相关内容