为什么`~/.bash_logout`中有一个对`clear_console`的调用?

fin*_*oot 3 bash ubuntu xorg debian x-server

当我使用同一用户登录tty1tty2启动 X 服务器会话时tty1- 一旦我注销tty2,X 服务器会话就会tty1崩溃。

这似乎是一个已知的错误:

正如您在错误报告中所读到的,问题在于对clear_consolein的调用~/.bash_logout。如果我删除该行,一切都会正常。

我的问题:

我没有注意到任何变化。(显然,除了 X 服务器不再崩溃。)当我注销时,控制台正在被清除 - 无论我删除该行。clear_console那么,首先打电话到那里的目的是什么?

Jde*_*eBP 5

世界希望您清洁屏幕。

正如我在https://unix.stackexchange.com/a/233855/5132以及间接引用的邮件列表讨论中所说的 ☺ …

正如 Greg Wooledge 和其他人所发现的那样,不想在注销和后续登录之间清除虚拟终端是一种逆潮流而行的做法。自 20 世纪 70 年代以来,特权用户或老板的敏感输出在注销后仍然存在,这一直是 Unices(实际上也是其他分时远程访问操作系统)的一个安全问题,并且需要付出很大的努力才能撤消所有这些输出。人们为避免这个问题而投入的东西。正如您所观察到的,他们引入了几个重叠的机制来执行此操作。

  • 许多系统的clear_consoleshell 注销脚本中都有一个标准命令。(这本身就是有问题的,因为它不能很好地与在内核虚拟终端 #1 上运行的图形程序配合使用,并且不能与任何其他类型的终端(虚拟的或真实的)一起使用。)

    必须删除该命令。

  • 针对虚拟终端的 getty 程序(例如 )的默认设置mingetty是清除终端。(它在登录之前执行此操作,这意味着如果 TTY 登录服务停止,终端输出可以保持不被删除。具有讽刺意味的是,此功能本来可以更好地放置在 中login,这要归功于 PAM 的必要性,它在注销时仍在运行。 )

    必须部署该--noclear选项才能禁用此功能。在 systemd 操作系统上,这涉及编写一个或多个单元文件覆盖文件、更改设置ExecStart或简单地指向autovt@.service自己设计的本地单元文件。

  • systemd 提供的getty@.service模板服务单元集TTYVTDisallocate=yes指示 systemd 清除内核虚拟终端。(这又不适用于任何其他类型的终端,甚至用户空间虚拟终端也不起作用,正如其名称所部分反映的那样。)

    这也必须再次使用覆盖或指向的不同服务模板来删除autovt@.service

当然,它们并不完全重叠。 mingetty对于通过串行设备连接的真实终端没有用;clear_console奇怪的是,它是 Bourne Again shell 包的一部分,并且不会被使用 Korn、Z、Almquist、Fish、Watanabe 或其他 shell 作为用户帐户的交互式登录 shell 的人调用;并且systemdTTYVTDisallocate机制不适用于非systemd操作系统。

正如我在几年前的邮件列表讨论中所说,console_clear这是双重不必要的。自 2011 年以来,Linux 内置终端仿真器已支持3用于清除回滚缓冲区的 ED 控制序列,因此从一开始就没有必要进行具有这些有害副作用的切换虚拟终端的操作。几年前,我console-clear向 nosh 工具集添加了一个命令,该命令发出此控制序列(因此不仅可以与 Linux 内置终端仿真器一起使用,还可以通过远程连接进行工作)。如果 terminfo 这么说的话, ncursesclear命令现在也知道发出相关的控制序列。

当然,console-terminal-emulator作为标准,在终端挂起时清除其显示缓冲区。

进一步阅读


Tho*_*key 5

根据dlocateclear_console是 (Debian) bash 软件包的一部分。它不属于上游bash来源。包变更日志告诉您它的来源时间/地点:

——马蒂亚斯·克洛泽,2006 年 3 月 23 日星期四 01:16:22 +0100

bash (3.1-3) 不稳定;紧急程度=低

...

  从 Ubuntu 合并:
  *clear_console:用于清除控制台的新帮助程序,包括
    回滚缓冲区。
  * /etc/skel/.bash_logout:再次安装并使用clear_console。
    Ubuntu#29405。关闭:#331504。

引用的错误报告给出了添加它的原因:

  • Ubuntu #29405,2006年 1 月“clear”在“exit”之前未运行

    注销 F1-F6 终端时,即使出现下一个登录屏幕,所有现有的活动输出也会保留在屏幕上。在出现新登录之前应清除屏幕,以便其他用户不会查看私人输出。

  • Debian #331504,2005年 10 月bash:请提供默认的 /etc/skel/.bash_logout

    如果 bash 在 /etc/skel 中提供默认的 .bash_logout 供用户在通过控制台登录时默认使用来清理屏幕,那就太好了,这是常见的请求,特别是在人们不希望其他人的多用户环境中看看他们在做什么。

顺便说一下,这里与ncurses一起提到了这一点:

前者通过调整1999 年xterm补丁 #107(针对 Linux 控制台)中的一个功能得到了解决,而后者则由于许可证不兼容而无济于事。