我有两台计算机,都运行 Debian Bookworm,并升级到相同的程度并安装了最新的软件。两台机器都配置为启动到文本终端,这是它们在启动 X 之前需要执行的操作。
问题是一台计算机启动到/dev/tty0
而不是,/dev/tty1
这意味着在计算机 2 上运行的 xinit 命令在计算机 1 上不起作用。
计算机 1 的内核启动时/dev/tty0
具有以下权限:
crw------- 1 ben tty 4, 0 May 23 16:46 /dev/tty0
crw--w---- 1 root tty 4, 1 May 23 16:46 /dev/tty1
crw------- 1 ben tty 4, 2 May 23 16:13 /dev/tty2
计算机 2 的内核启动时/dev/tty1
具有以下权限:
crw--w---- 1 root tty 4, 0 May 23 05:55 /dev/tty0
crw--w---- 1 ben tty 4, 1 May 23 16:29 /dev/tty1
crw------- 1 ben tty 4, 2 May 23 16:13 /dev/tty2
启动适用于计算机 2 但不适用于计算机 1 的 X 的命令是:
xinit /home/ben/.xinitrc -- /usr/bin/X :0 vt1
用户 ben 在计算机 1 上没有访问 的权限tty1
,因此 X 失败并显示一条no permission
消息。
要在计算机 1 上启动 X,用户 ben 需要将xinit
命令更改为使用vt2
,然后导航到 来tty2
运行它。
对我来说,令人困惑的是/dev/tty1
计算机 1 上不提供该功能。
计算机 1 显示的终端为:
Ctrl+ alt+F1得到/dev/tty0
Ctrl+ alt+F2得到/dev/tty2
Ctrl+ alt+F3得到/dev/tty3
而在计算机 2 上,终端显示为:
Ctrl+ alt+F1得到/dev/tty0
Ctrl+ alt+F2得到/dev/tty1
Ctrl+ alt+F3得到/dev/tty2
/dev/tty1
为了在计算机 1 上启动,我添加了console=/dev/tty1
.机器冻结,屏幕空白,光标在左上方闪烁。它需要一个救援磁盘来重写grub.cfg
文件并删除选项才能正常启动。
Systemd在两台机器上显示相同的active and running
输出。[email protected]
我的问题是:如何配置计算机,使其/dev/tty1
出现在计算机 1 上,从而使计算机 1 启动到dev/tty1
而不是启动到/dev/tty0
?
我在这里问,因为在其他地方找不到答案。
编辑:感谢所有回复者!
cat /proc/fb 在两台机器上输出相同的内容:0 nouveaudrmfb。
我想我可以在启动时编写脚本更改 tty0 和 tty1 的所有权,但这感觉像是一种解决方法。这里没有其他机器需要这个。
答案1
设备节点的/dev/tty0
作用类似于“当前选择的虚拟控制台是什么”的硬链接,尽管它实际上是在虚拟控制台驱动程序代码中实现的。
作为console=
引导选项值,/dev/tty0
意味着“我想使用通常的 KVM 物理控制台(及其整套虚拟控制台)作为系统控制台”。正如您所发现的,引导选项console=/dev/tty1
无效(至少在 x86 硬件上):
通常root
将拥有任何注销的 tty 设备,并且登录的用户将拥有登录进程分配给他们的 tty 设备的所有权。注销应该将 tty 设备归还给 的所有权root
。但是,如果用户ben
已成功获得 的所有权/dev/tty0
,这可能意味着他们可能能够使用它(例如通过 SSH 连接登录)将内容注入到在任何实际虚拟控制台上本地登录的人的会话中 ( /dev/tty[1..N]
) 。
的所有权/dev/tty0
永远不应该改变根所有权。
您能看到以 root 身份运行的进程tty0
吗fuser /dev/tty0
?正常情况下不应该有。
有[email protected]
定义吗?如果是,这可能会导致问题:/dev/tty0
永远不应该用于常规登录。