You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派4 Ubuntu20.04下systemd运行GUI应用oversteer报无Display错误如何解决

问题原因
  • DISPLAY变量冲突:脚本内设置DISPLAY=:99.0,但service配置文件中设置DISPLAY=:0,变量不一致导致程序无法找到正确的X服务器地址
  • 服务启动时机过早:当前配置的启动依赖After=local-fs.target仅保证本地文件系统挂载完成,此时图形界面X服务还未启动,GUI程序无法连接显示服务
  • 启动目标配置错误:WantedBy=multi-user.target对应无图形界面的多用户运行级,默认不会加载X服务,桌面环境启动对应的目标是graphical.target
  • 权限配置冲突:服务未指定运行用户默认以root身份执行,同时脚本中重复使用sudo执行命令,导致X授权信息传递失败
  • 设备访问权限问题:oversteer操作方向盘硬件需要对应设备权限,直接用sudo执行会破坏图形环境变量传递
修复步骤

1. 修正oversteer.sh脚本

#!/bin/bash
# 延长等待时间确保X服务完全启动
sleep 5s
# 统一使用和service一致的DISPLAY变量
export DISPLAY=:0
# 无需额外设置屏幕参数,删除冗余配置
# 去掉sudo,后续通过udev规则配置硬件访问权限
oversteer --autocenter 45 &
oversteer --range 720

给脚本赋予执行权限:
chmod +x /home/ubuntu/g29_steering_wheel/autostart_scripts/oversteer.sh

2. 配置udev规则免sudo操作方向盘

新建/etc/udev/rules.d/99-steering-wheel.rules文件,写入以下内容:

SUBSYSTEM=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c24f", MODE="0666", GROUP="ubuntu"

注:如果你的罗技G29设备id不同,可以通过lsusb命令查询替换对应的idVendor和idProduct值
重载udev规则生效:
sudo udevadm control --reload-rules && sudo udevadm trigger

3. 修正oversteer.service配置文件

[Unit]
Description=oversteer steering wheel controller
# 增加图形服务依赖,确保X启动后再运行
After=local-fs.target graphical.target display-manager.service

[Service]
# 指定运行用户为ubuntu,和XAUTHORITY所属用户一致
User=ubuntu
Group=ubuntu
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/ubuntu/.Xauthority"
ExecStart=/home/ubuntu/g29_steering_wheel/autostart_scripts/oversteer.sh
Restart=on-failure
Type=simple
StandardOutput=journal+console
# 增加启动重试延迟,避免X未完全启动导致启动失败
RestartSec=3

[Install]
# 修改为图形级目标
WantedBy=graphical.target

4. 重载systemd配置并启用服务

依次执行以下命令:

sudo systemctl daemon-reload
sudo systemctl enable oversteer.service

重启系统即可验证服务是否正常运行。如果启动失败可通过journalctl -u oversteer.service -f查看详细错误日志排查问题。

内容的提问来源于stack exchange,提问作者siddharth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:00:02