龙虾尝鲜记(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 无头自启」

祝大家早日尝到龙虾!

相关推荐
TLY-101-0102 小时前
工作日记:在win11上开启WSL安装ubuntu,使用VLLM运行ASR模型
linux·ubuntu·ai·vllm
dashizhi20152 小时前
服务器如何记录共享文件访问日志、查看用户访问共享文件的行为日志?
运维·服务器
tongxh4232 小时前
自己编译RustDesk,并将自建ID服务器和key信息写入客户端
运维·服务器
FirstFrost --sy2 小时前
仿mudou库one thread one loop式并发服务器实现
运维·服务器·开发语言·c++
不知名。。。。。。。。2 小时前
仿muduo库实现高并发服务器--定时器模块的整合
linux·运维·服务器
勿芮介2 小时前
【大模型应用】在window/linux上卸载OpenClaw
java·服务器·前端
wanhengidc2 小时前
裸金属服务器与普通服务器的区别
运维·服务器·网络·游戏·智能手机
野犬寒鸦2 小时前
面试常问:TCP相关(中级篇)问题原因即解决方案
服务器·网络·后端·面试
虾..2 小时前
Linux 基于TCP实现服务端客户端通信(多进程/多线程版)
java·服务器·tcp/ip