我有两台计算机,都运行 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
命令更改为 use 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 所有权的脚本,但这感觉像是一种解决方法。这里没有其他机器需要这个。
设备节点
/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
永远不应该用于常规登录。