一、核心功能
一站式完成「自动登录 + 合盖不睡眠 + 永不息屏 + 开机关物理屏 + 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
三、结果验证
- 核心验证点(重启后)
- 笔记本合盖 / 无显示器:内屏自动黑掉,无登录界面;
- 远程 SSH 连接:执行 sudo systemctl status copaw,显示 active (running);
- 远程桌面连接:能正常访问,copaw 控制台(8088 端口)可打开;
- 本地唤醒:打开合盖,移动鼠标 / 按任意键,内屏立即亮起。
这块反复有点多,可能有点乱,但应该是没有大问题的。
如果按我的脚本有问题的话,可以按如下思路让 AI 给你单独解决也是可以的。
「自动登录 + 合盖不睡眠 + 永不息屏 + 开机关物理屏 + copaw 无头自启」
祝大家早日尝到龙虾!