![我可以仅为虚拟控制台设置 bash 超时 (ctrl+alt+{f1-f6})](https://linux22.com/image/3801/%E6%88%91%E5%8F%AF%E4%BB%A5%E4%BB%85%E4%B8%BA%E8%99%9A%E6%8B%9F%E6%8E%A7%E5%88%B6%E5%8F%B0%E8%AE%BE%E7%BD%AE%20bash%20%E8%B6%85%E6%97%B6%20(ctrl%2Balt%2B%7Bf1-f6%7D).png)
我知道我可以设置一个TMOUT
变量在指定的不活动时间后自动结束 bash 会话。但是,我想要的是应用它仅有的我的 6 个内置虚拟控制台,可以通过ctrl+ alt+{ F1... F6} 访问。
当我想打开终端时,我几乎总是使用终端应用程序。当我离开计算机时,我会锁定屏幕,以防止任何人访问这些终端。所以我不想在这些上有超时。
然而,在极少数情况下,我会使用我的虚拟控制台之一在我的计算机上工作。通常这是由于我的主 Gnome 会话被冻结或无法使用。我杀死了有问题的应用程序,然后切换回我的主会话。
最重要的是,有几次我在恢复 Gnome 会话时忘记退出虚拟控制台。因此,如果我离开,我的计算机将完全不受保护,因为在 Gnome 上锁定屏幕只会锁定 GUI;用户可以切换到虚拟控制台并终止我的 gnome 锁屏或以其他方式弄乱我的计算机。
我是否可以仅为内置虚拟控制台设置超时值,同时允许终端应用程序会话无限期保持不活动状态?
答案1
您可以检查是否在图形终端中运行,只有TMOUT
在没有运行时才进行设置。执行此操作的一个简单方法是tty
命令:
tty - print the file name of the terminal connected to standard input
从 GUI 终端模拟器运行时:
$ tty
/dev/pts/5
从虚拟控制台运行时:
$ tty
/dev/tty2
因此,将这些行添加到您的文件中~/.profile
应该会在十分钟后终止您的 bash 会话:
tty | grep tty >/dev/null && TMOUT=600
答案2
我从来不喜欢 TMOUT 解决方案。首先,因为它只有在您根据提示离开会话时才有效;如果你把它留在 Vim 中,甚至在 sudo 密码提示符下,它也不会超时。其次,我不希望会话被关闭,我希望它被锁定,就像图形环境一样。
GNU Screen 能够在闲置一段时间后锁定,因此我执行了以下操作。在我的一开始~/.bashrc
我添加了这个:
if [ "$TERM" = "linux" ] && tty | egrep -q '^/dev/tty[[:digit:]]+$'
then
exec screen -c ~/.ttyscreenrc
fi
这exec
很重要,因为它确保screen
替换 Bash,并且当它结束时,TTY 会话将关闭。
我把~/.ttyscreenrc
这个:
startup_message off
idle 180 lockscreen
跳过 Screen 的欢迎屏幕并在 3 分钟不活动后锁定。
答案3
这是 PAM 模块的一个很好的例子pam_env.so
。虚拟控制台登录使用该login
程序,因此您可以打开/etc/pam.d/login
并添加如下行:
session required pam_env.so readenv=1 envfile=/etc/vc-environment user_readenv=0
通过随附的新文件,/etc/vc-environment
:
TMOUT=600
为此使用 PAM 有两个优点:
- 它适用于登录虚拟控制台的任何用户(尽管它不会阻止他们
TMOUT
以后进行更改)。 - 超时也可以应用于其他特定服务,例如
sudo
。
在这里阅读有关此模块的详细信息。