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

Jetson Nano开机自启动脚本中OpenCV imshow窗口无法显示求助

问题描述

运行Ubuntu 18.04的Jetson Nano,尝试创建开机自启动脚本实现图片显示(后续计划扩展到摄像头视频流),遇到以下问题:

  • 手动在终端运行脚本时,图片正常显示,按下ESC键后会生成指定TXT文件,全程逻辑正常。
  • 开机自启动时,cv2.imshow()窗口完全不显示,按下ESC键后后续代码也无法执行;注释掉图形显示相关代码后,脚本能正常完成所有逻辑。
  • 更换PIL、Matplotlib等其他图形显示库,问题同样存在,并非OpenCV特有。

测试核心脚本逻辑:

from os.path import expanduser
import datetime
import cv2

img = cv2.imread('/home/sam/Documents/2022-08-31-220946_4.jpg')
window_name = 'test_img'

cv2.imshow(window_name,img)

while True:
    k = cv2.waitKey(0) & 0xFF
    if k==27:
        break
cv2.destroyAllWindows()

# 后续文件写入逻辑
file = open(expanduser("~") + '/Desktop/i_was_created.txt', 'w')
file.write("This LinuxShellTips Tutorial Actually worked!\n" + str(datetime.datetime.now()))
file.write('OpenCV Version: {}\n'.format(str(cv2.__version__)))
file.close()
问题原因

开机自启动脚本默认运行在无X11桌面会话绑定的环境中:

  • OpenCV、PIL等图形界面库依赖X服务器渲染窗口,系统开机启动阶段(或系统级启动任务)未加载桌面会话,没有可用的DISPLAY环境变量,导致无法创建显示窗口。
  • 脚本执行到cv2.waitKey(0)这类等待用户输入的函数时,因没有实际交互窗口,程序会陷入无限等待,后续代码无法执行。
解决方法

1. 绑定DISPLAY环境变量

在Python脚本开头添加环境变量指定,强制绑定当前桌面的X显示会话:

import os
# 指定DISPLAY为桌面默认的:0(可在终端执行`echo $DISPLAY`确认)
os.environ['DISPLAY'] = ':0'
os.environ['XAUTHORITY'] = '/home/sam/.Xauthority'  # 替换为你的用户目录

2. 使用桌面级启动项

优先选择桌面级启动方式,避免系统级启动的环境缺失问题:

  • 打开Ubuntu的「Startup Applications」(启动应用程序),添加新启动项:
    • 名称:自定义(如Image Display Test)
    • 命令:python3 /home/sam/path/to/your/script.py
    • 注释:开机显示测试图片
  • 该方式会在桌面环境完全加载后执行脚本,自动继承桌面的DISPLAY环境变量。

3. 若使用systemd服务(系统级启动)

如果必须用systemd管理启动脚本,创建或修改service文件(比如/etc/systemd/system/img-display.service):

[Unit]
Description=Startup Image Display Test
After=graphical.target  # 确保在桌面环境启动后再运行

[Service]
User=sam  # 替换为你的用户名
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/sam/.Xauthority"
ExecStart=/usr/bin/python3 /home/sam/path/to/your/script.py
Type=simple

[Install]
WantedBy=graphical.target

执行命令启用服务:

sudo systemctl daemon-reload
sudo systemctl enable img-display.service

4. 验证修复效果

在终端模拟无桌面会话的环境运行脚本,确认修复有效:

su - sam -c "DISPLAY=:0 python3 /home/sam/path/to/your/script.py"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:56:30