阿罗哈!
我有一个连接到显示器的无头服务器。服务器未安装图形环境,也未连接任何键盘或鼠标。我可以通过 SSH 登录。
我想让它在显示器上显示的控制台(tty)上显示 tmux 会话,而无需插入键盘、登录 tty 并在那里附加 tmux 会话。这样,我可以简单地通过 SSH 连接到该 tmux 会话,并远程控制该监视器上显示的内容(日志、系统使用情况等)。
我如何知道哪个控制台连接到该监视器(登录外壳,没有用户登录),以及如何在启动时自动在其上运行命令(和/或远程/从另一个控制台)?
答案1
解决方案
这是针对使用systemd
.
/etc/systemd/system/tty8tmux.service
以 root 身份创建一个包含以下内容的文件:
[Unit]
Description=Tmux session in tty8
[Service]
Type=idle
User=herrcrazi
KillMode=process
ExecStart=/usr/bin/tmux new-session -s tty8 -A -f read-only
ExecStartPost=+/usr/bin/chvt 8
ExecStop=/usr/bin/tmux kill-session -t tty8
ExecStopPost=+/usr/bin/chvt 1
TTYPath=/dev/tty8
StandardInput=tty
StandardOutput=tty
StandardError=tty
[Install]
WantedBy=multi-user.target
通知systemd
某些事情发生了变化:
sudo systemctl daemon-reload
启用该服务:
sudo systemctl enable tty8tmux.service
启动服务:
sudo systemctl start tty8tmux.service
启动服务将创建一个tty8
以指定用户命名的tmux 会话herrcrazi
,并将 tmux 客户端附加到它。客户端将在虚拟终端 tty8 中运行。如果 tmux 会话已经存在,客户端将附加到它而不重新创建。无论如何,tty8 将成为前台虚拟终端。
停止服务将破坏名为 的 tmux 会话tty8
并将显示切换到 tty1。如果您更喜欢仅终止 tmux 客户端(而不是会话),那么只需省略(删除或注释掉)指定ExecStop=
.由于KillMode=process
只有主进程(即 tmux 客户端)才会被杀死。
该服务将随系统自动启动。
通过 SSH 连接后herrcrazi
,通过调用以下命令附加到 tmux 会话:
tmux attach-session -t tty8 -f ignore-size
提示、注释
该服务将随系统启动,并且可能还没有可供用户使用的 tmux 服务器
herrcrazi
。 tmux 服务器将自动启动。由于herrcrazi
您稍后可能想要创建其他 tmux 会话,因此它们将使用同一服务器。服务器的环境将来自其实际的父级(此处来自systemd
),并且在客户端连接时不会自动更新,因此它可能是也可能不是您所期望的。参见例如这个答案以及其中的链接。tmux 服务器将正式属于该服务(就控制组而言),尽管
KillMode=process
在服务停止时可以避免其被终止。由于上述原因,请考虑
User=somebodyelse
或告诉tmux
使用非默认套接字(例如,使用-L tty8
)。连接时,您需要匹配用户 (sudo -u somebodyelse tmux a …
) 或选择正确的插座。这样,您的普通用户herrcrazi
将能够将 tmux 用于其他目的,就好像该服务不存在一样。somebodyelse
可能是根。相反,
ExecStart=/usr/bin/tmux …
您可以ExecStart=/path/to/shellscript
,因此创建一个tmux 会话并在预定义的窗格布局中shellscript
运行预定义的工具集(例如htop
,, ),并最终运行。具体注意事项:watch sensors
watch df -h
exec
tmux attach-session -t tty8
内核消息可能会出现在 tty8 中,尤其是在关闭时。在正常操作期间,它们会干扰我们的 tmux 客户端显示的内容;并且由于在 tty8 内运行的客户端根据自己的需要配置终端,因此此类消息看起来不合适。考虑告诉内核仅使用 tty1。您可以通过添加
console=tty1
内核参数来完成此操作。如果这是唯一的参数,那么相关行/etc/default/grub
应如下所示:GRUB_CMDLINE_LINUX="console=tty1"
(或者
GRUB_CMDLINE_LINUX_DEFAULT
)。保存文件后调用
sudo update-grub
并重新启动。请注意,您仍然可以使用 点播查看消息dmesg
或使用 继续观看dmesg -wH
。如果您想手动将前台 tty 更改为
ttyN
,请使用chvt N
。如果不在虚拟终端中(例如,如果通过 SSH 登录),您需要sudo
:sudo chvt 2
在 Debian GNU/Linux 12 上测试。