龙虾尝鲜记(4)——Ubuntu 笔记本无头服务器全配置

一、核心功能

一站式完成「自动登录 + 合盖不睡眠 + 永不息屏 + 开机关物理屏 + copaw 无头自启」,无需任何手动点选,执行后重启即实现:

  • 开机自动登录,无登录界面
  • 合盖不睡眠、系统永不息屏
  • 开机 20 秒自动关闭物理内屏(键鼠可唤醒)
  • copaw 自动后台运行,无需人工干预

二、编辑脚本并运行

创建自动关屏脚本,在 /home/$USER_NAME/ 中创建 auto_off_screen.sh 脚本并添加执行权限,实现系统开机后自动登录桌面加载完成后无键鼠操作 20 秒后自动关屏。

bash 复制代码
#!/bin/bash
# 核心:仅在首次自动登录时执行(避免注销/登录重复触发)

if [ ! -f /tmp/screen_off_flag ]; then
    # 等待虚拟显示DISPLAY=:0加载完成
    sleep 20
    # 适配虚拟显示的关屏命令(不操作物理设备)
    export DISPLAY=:0
    xset -display :0 s off
    xset -display :0 -dpms
    xset -display :0 dpms force off
    # 创建标记文件,避免重复执行
    touch /tmp/screen_off_flag
    # 确保标记文件重启后自动删除
    echo "rm -f /tmp/screen_off_flag" | sudo tee -a /etc/rc.local > /dev/null
    sudo chmod +x /etc/rc.local
fi

创建自动关屏服务。

bash 复制代码
echo "===== 创建系统级自启服务(脱离GNOME会话) ====="
# 写入systemd服务,仅在首次开机自动登录后执行
cat << EOF | sudo tee /etc/systemd/system/screen-off.service
[Unit]
Description=Headless Screen Off (Only First Login)
After=graphical.target gdm.service  # 等待GNOME桌面+自动登录完成
Requires=graphical.target

[Service]
User=$USER_NAME
Group=$USER_NAME
Type=oneshot  # 仅执行一次,避免重复触发
ExecStart=$SCRIPT_PATH
Environment=DISPLAY=$DISPLAY_NUM
Environment=XAUTHORITY=/home/$USER_NAME/.Xauthority
RemainAfterExit=yes

[Install]
WantedBy=graphical.target  # 绑定到桌面加载完成
EOF

用记事本之类的工具编辑文件内容如下。并保存为 laptop_headless.sh,给可执行权限,然后执行 sudo bash laptop_headless.sh。

bash 复制代码
#!/bin/bash
set -e

USER_NAME="seraph"
# 替换为copaw绝对路径(示例:/home/seraph/.copaw/venv/bin/copaw)
# 要确保 which copaw 能输出对应的目录,也可以不用改
COPAW_EXEC_PATH="$(which copaw)"

# 划重点,还没有介绍 copaw 安装,这节可以先忽略
# 或者先去跳了看下一节(如果发了的话)
echo "===== 1. copaw.service配置 ====="
# 重新生成copaw.service,使用绝对路径+完整环境变量
cat << EOF | sudo tee /etc/systemd/system/copaw.service
[Unit]
Description=copaw无头自动启动服务
After=network.target graphical.target multi-user.target
Wants=network.target

[Service]
User=$USER_NAME
Group=$USER_NAME
# 使用copaw绝对路径,避免环境变量问题
ExecStart=$COPAW_EXEC_PATH app
# 核心:继承用户环境变量,补全PATH
Environment="PATH=/home/$USER_NAME/.copaw/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Environment="HOME=/home/$USER_NAME"
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/$USER_NAME/.Xauthority"
# 保障服务稳定性
Restart=always
RestartSec=5
TimeoutStartSec=60
StandardOutput=journal+console
StandardError=journal+console

[Install]
WantedBy=multi-user.target
EOF

echo "===== 2. 重载并重启copaw服务 ====="
sudo systemctl daemon-reload
sudo systemctl stop copaw || true
sudo systemctl start copaw

echo "===== 3. 验证copaw服务状态 ====="
sudo systemctl status copaw --no-pager

echo "===== 修复完成! ====="
echo "✅ 核心修改:"
echo "   1. 使用copaw绝对路径替代全局命令,解决systemd找不到可执行文件的问题"
echo "   2. 补全PATH环境变量,确保copaw依赖的虚拟环境生效"
echo "🔍 验证访问:curl http://127.0.0.1:8088(返回HTML内容即正常)"
echo "✅ 查看copaw状态:sudo systemctl status copaw"
echo "✅ 查看copaw日志:journalctl -u copaw -f"

或在终端中按如下方式执行也可。

1、复制脚本内容,在笔记本终端执行:

bash 复制代码
nano laptop_headless_final.sh

2、粘贴脚本(确认 USER_NAME="seraph" 是你的实际用户名),按 Ctrl+O 保存、Ctrl+X 退出;

3、添加执行权限并运行:

bash 复制代码
chmod +x laptop_headless.sh
sudo bash laptop_headless.sh

4、重启生效:

bash 复制代码
sudo reboot

三、结果验证

  1. 核心验证点(重启后)
  2. 笔记本合盖 / 无显示器:内屏自动黑掉,无登录界面;
  3. 远程 SSH 连接:执行 sudo systemctl status copaw,显示 active (running);
  4. 远程桌面连接:能正常访问,copaw 控制台(8088 端口)可打开;
  5. 本地唤醒:打开合盖,移动鼠标 / 按任意键,内屏立即亮起。

这块反复有点多,可能有点乱,但应该是没有大问题的。

如果按我的脚本有问题的话,可以按如下思路让 AI 给你单独解决也是可以的。

「自动登录 + 合盖不睡眠 + 永不息屏 + 开机关物理屏 + copaw 无头自启」

祝大家早日尝到龙虾!

相关推荐
律宏阔4 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔4 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴4 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千4 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei374 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei374 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei374 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
GeW5 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux
百万蹄蹄向前冲5 小时前
双端同步!云服务器装最新Node.js v26.10全过程追踪
服务器·人工智能·node.js
GeW5 小时前
工业场景中的Linux与数据库选型:高端化转型的技术底座
linux