这个问题快把我逼疯了!
我在 FreeBSD 上使用“/etc/ttys”来配置执行 getty 时执行的命令。
这是我的配置文件的相关行/etc/ttys
:
ttyv8 "/usr/local/bin/startx" xterm on secure
我的问题是,启动时,当前控制台切换到 ttyv8 (按预期工作),然后我的 VirtualBox 窗口调整大小(这通常表明 X Server 正在控制图形输出),但随后 X 服务器立即关闭。 FreeBSD 重试 5 次,等待 30 秒,然后重试 5 次,等待 30 秒,依此类推。这真让我抓狂!
然而,登录文本控制台并startx
从那里运行后,它工作得完全正常,没有任何问题。我没有,~/.xinitrc
但修改了默认的 xinit 文件/usr/local/etc/X11/xinit
。
当我尝试调试整个内容时,将管道添加到我的 tty 命令中:
ttyv8 "/usr/local/bin/startx > /tmp/startx.log" xterm on secure
startx.log 不存在。它根本不起作用。然而,标准 Xorg.0.log 会随着每次 getty 尝试启动 x 服务器而更新。 Xorg.0.log 根本什么也没说。只是在加载驱动程序等后成功结束。就像我的 xinitrc 根本不会被读取一样。
请注意,我不想使用登录管理器,也不需要任何自动登录机制。
先感谢您。
答案1
ttyv8 "/usr/local/bin/startx" xterm 安全
接近,但错误。
手册ttys
给出了如何准确执行此操作的示例。您需要使用window=
设置指定实际的 X 服务器,并指定要在记录的第二个字段中运行的初始 X 客户端:
# 终端模拟/窗口系统 ttyv0 "/usr/local/bin/xterm -display :0" xterm on window="/usr/local/bin/X :0"
就我个人而言,我建议不要使用这种机制ttys
,原因有以下三个:
- 正如您所发现的,重新启动行为并不漂亮。事实上,与适当的服务管理器相比,它的可配置性几乎为零,在服务管理器中,人们可以相当简单地执行诸如配置 X 客户端和服务器的环境变量以及启用/禁用服务之类的事情。
- 一旦混合了桌面管理器,这并不是真正的做法。这FreeBSD 手册展示如何通过各自的 Mewburn
rc
脚本运行各种 destkop 管理器,通过rc.conf
. TrueOS 将其替换为由 OpenRC 脚本调用的 PCDM。两者都不ttys
涉及数据库条目。 - 这不是在 nosh 服务管理下执行此操作的方式,它具有 PCDM 和各种桌面管理器的服务捆绑包,并且可以类似地使用服务捆绑包来启动普通 X 服务器和客户端,在此类服务包的正常方式。不
ttys
涉及数据库条目。
我建议您编写一个 Mewburnrc
脚本、一个 OpenRC 脚本,甚至一个 nosh 服务包来运行您的 X 服务器和客户端。
进一步阅读
答案2
我正在使用以下方式:
- 在
ttyv0
我的用户上自动登录。 - 我
~/.login
检查了 tty。如果是的话ttyv0
就会运行startx
。 - 结束后
startx
(关闭 xorg 会话)询问有关暂停/重新启动的信息。
说明:
1.自动登录: 到/etc/ttys
:
ttyv0 "/usr/libexec/getty autologin" xterm on secure
并/etc/gettytab
:
autologin::al=MYUSER
2.&3.相关内容~/.login
。我正在使用tcsh
,但这个想法也有效sh
:
if ($tty == "ttyv0") then
echo Starting Xorg...
startx
echo "Halt (h) Reboot (r) Nothing (n) ?"
set answer = $<
if ($answer == "h") then
/sbin/shutdown -p now
else if ($answer == "r") then
/sbin/shutdown -r now
endif
endif