news 2026/4/29 19:34:07

Ubuntu图形界面自启程序?测试脚本也能做到

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu图形界面自启程序?测试脚本也能做到

Ubuntu图形界面自启程序?测试脚本也能做到

你是不是也遇到过这样的情况:每次开机后都要手动打开终端、运行几个常用命令或脚本,重复操作特别麻烦?尤其是当你在做自动化测试、部署服务或者使用工控机时,能不能让一个简单的 Bash 脚本在登录桌面后自动执行

答案是肯定的。而且方法不止一种。

本文将带你一步步了解如何在 Ubuntu 桌面环境中实现图形界面下的开机自启动脚本,并以一个实际的test.sh测试脚本为例,展示多种可行方案。无论你是刚接触 Linux 的新手,还是需要配置自动化任务的开发者,都能找到适合自己的方式。

我们还会分析每种方法的适用场景、优缺点以及常见问题,确保你不仅能“跑起来”,还能“用得好”。


1. 准备测试脚本

首先,我们需要一个用于验证的简单脚本。这个脚本将在桌面上执行ls命令,并输出 “OK!” 提示信息。

1.1 创建测试脚本

打开终端,输入以下命令创建脚本文件:

nano ~/Desktop/test.sh

写入如下内容:

#!/bin/bash # test.sh - 简单测试脚本 cd /home/$USER/Desktop/ ls echo "OK!" exit 0

注意:请根据你的用户名替换/home/User/中的User,或者直接使用$USER变量更安全。

保存并退出编辑器(Ctrl+O → Enter → Ctrl+X)。

1.2 设置可执行权限

为了让系统能够运行该脚本,必须赋予它执行权限:

chmod +x ~/Desktop/test.sh

现在你可以手动运行测试一下:

~/Desktop/test.sh

如果看到桌面目录下的文件列表和OK!输出,说明脚本正常工作。

接下来,我们就让它在每次登录图形界面时自动运行。


2. 方法一:通过 GNOME 启动应用程序(推荐给桌面用户)

这是最直观、最适合普通桌面用户的方案——利用 Ubuntu 自带的“启动应用程序”工具,在用户登录进入桌面环境后自动触发脚本。

2.1 打开启动应用程序管理器

在终端中运行以下命令:

gnome-session-properties

这会打开“启动应用程序首选项”窗口。

2.2 添加自定义启动项

点击添加(Add)按钮,填写以下信息:

  • 名称(Name):Test Script Auto Start
  • 命令(Command)gnome-terminal -e "bash -c '/home/$USER/Desktop/test.sh; exec bash'"
  • 注释(Comment):运行桌面测试脚本

⚠️ 说明:

  • 使用gnome-terminal是为了让脚本能在一个可见终端中运行,便于观察输出。
  • -e参数指定终端启动时要执行的命令。
  • exec bash的作用是保持终端窗口不关闭,方便查看结果。

点击“添加”后,你会在列表中看到新条目。下次重启并登录用户账户时,终端将自动弹出并执行脚本。

2.3 验证与调试

重新启动系统,登录桌面,观察是否自动弹出终端并显示文件列表和OK!

如果没有反应,请检查:

  • 脚本路径是否正确(建议使用绝对路径)
  • 是否设置了可执行权限
  • 用户名是否匹配

此方法的优点是:

  • 不依赖 root 权限
  • 易于管理和删除
  • 仅对当前用户生效,安全性高

3. 方法二:修改 ~/.bashrc 实现间接启动

.bashrc文件是每个用户登录终端时都会自动加载的配置文件。我们可以利用这一点,在每次打开终端时自动执行特定脚本。

但注意:这种方式只有在启动新的终端会话时才会触发,不能保证“开机即运行”,除非配合其他机制。

3.1 编辑 .bashrc 文件

运行命令:

nano ~/.bashrc

滚动到底部,添加一行:

# 自动运行桌面测试脚本 if [ -f "/home/$USER/Desktop/test.sh" ]; then /home/$USER/Desktop/test.sh fi

保存退出。

3.2 结合 GNOME 启动项实现真正自启

为了让.bashrc生效,我们需要在登录时自动打开一个终端。回到“启动应用程序”工具,添加一条新规则:

  • 名称:Auto Terminal
  • 命令gnome-terminal
  • 注释:自动打开终端以触发 .bashrc 脚本

这样,登录时自动打开终端 → 终端读取.bashrc→ 执行test.sh,形成完整链条。

✅ 优势:灵活控制脚本逻辑,适合复杂初始化任务
❌ 劣势:依赖终端开启,不适合后台静默运行


4. 方法三:使用 /etc/init.d + update-rc.d(系统级服务方式)

这种方法属于传统的 SysVinit 服务管理方式,适用于需要在系统启动早期运行的任务。但由于它在用户登录前执行,无法直接访问桌面或用户目录,需谨慎使用。

4.1 移动脚本到系统目录

将脚本复制到/etc/init.d/目录下:

sudo cp ~/Desktop/test.sh /etc/init.d/ sudo chmod +x /etc/init.d/test.sh

4.2 注册为开机服务

使用update-rc.d命令注册服务:

sudo update-rc.d test.sh defaults

这条命令会在各个运行级别下创建相应的符号链接,使脚本在系统启动时按默认优先级运行。

如果你想调整启动顺序(比如希望它晚一点运行),可以指定优先级数字:

sudo update-rc.d test.sh defaults 90

数值越大,启动越晚。

4.3 移除服务

如果不再需要,可以用以下命令移除:

sudo update-rc.d -f test.sh remove

4.4 注意事项

  • 此方法在用户尚未登录时执行,因此/home/Desktop/路径可能不可访问(特别是未挂载用户空间时)
  • 推荐改用日志输出进行调试:
#!/bin/bash cd /home/$USER/Desktop/ || echo "Failed to cd" >> /tmp/test.log ls >> /tmp/test.log 2>&1 echo "OK!" >> /tmp/test.log

否则你很难看到输出结果。


5. 方法四:使用 rc.local(兼容旧系统的经典方案)

rc.local是一个传统的一键式启动脚本,在大多数 Ubuntu 版本中仍然可用(尽管已被 systemd 逐步取代)。

5.1 编辑 rc.local 文件

确保文件存在且可写:

sudo nano /etc/rc.local

exit 0之前插入调用命令:

# 在系统启动末尾运行测试脚本 su - $USER -c "bash /home/$USER/Desktop/test.sh" &

⚠️ 解释:

  • su - $USER切换到目标用户,避免权限问题
  • -c执行后续命令
  • &放入后台,防止阻塞启动流程

5.2 确保 rc.local 可执行

sudo chmod +x /etc/rc.local

某些新版 Ubuntu 默认没有启用rc-local.service,需要手动激活:

# 启用 rc.local 服务 sudo systemctl enable rc-local sudo systemctl start rc-local

5.3 查看运行状态

sudo systemctl status rc-local

如果有错误,可通过日志排查:

journalctl -u rc-local.service --since today

6. 方法对比与选择建议

下面是对四种主要方法的综合对比,帮助你根据实际需求做出选择。

方法触发时机是否需要root用户环境适用场景推荐指数
GNOME启动应用用户登录桌面后✅ 完整GUI环境普通用户日常自动化⭐⭐⭐⭐⭐
~/.bashrc + 终端自启打开终端时开发者初始化环境⭐⭐⭐⭐☆
/etc/init.d + update-rc.d系统启动早期❌(无GUI)系统服务、守护进程⭐⭐☆☆☆
rc.local系统启动后期⚠️(需切换用户)兼容性要求高的旧项目⭐⭐⭐☆☆

6.1 如何选择?

  • 你是普通桌面用户?→ 选GNOME启动应用程序
  • 你需要后台静默运行?→ 建议改用systemd user service
  • 你在做嵌入式或工控设备?→ 可结合自动登录 + GNOME自启实现稳定运行
  • 你追求最大兼容性?rc.local仍是稳妥选择

7. 常见问题与解决方案

7.1 脚本没反应?怎么办?

  1. 检查路径是否正确:使用绝对路径,避免相对路径失效
  2. 确认权限设置:确保脚本有+x权限
  3. 查看输出日志:重定向输出到文件以便调试:
/home/$USER/Desktop/test.sh >> /tmp/startup.log 2>&1
  1. 测试命令能否手动执行:先在终端里运行一遍,排除语法错误

7.2 终端一闪而过?

这是因为脚本执行完就退出了。解决办法是在命令末尾加上暂停:

gnome-terminal -e "bash -c '/path/to/test.sh; read -p \"Press Enter to continue...\"'"

或者使用exec bash保留终端。

7.3 图形界面未加载导致失败?

某些方法(如/etc/init.drc.local)在图形界面尚未启动时运行,可能导致无法访问桌面路径或显示输出。

✅ 正确做法:延迟执行或切换到用户上下文:

sleep 10 && su - $USER -c "DISPLAY=:0 XAUTHORITY=/home/$USER/.Xauthority /home/$USER/Desktop/test.sh"

DISPLAY=:0表示主显示设备,XAUTHORITY是 X11 认证文件路径


8. 总结

8.1 回顾所学内容

本文围绕“Ubuntu 图形界面下实现脚本自启动”这一实际需求,介绍了四种可行方案:

  1. GNOME启动应用程序:最简单、最安全,适合绝大多数桌面用户
  2. .bashrc + 自动终端:适合开发人员定制工作环境
  3. /etc/init.d + update-rc.d:传统系统级服务方式,适合后台服务
  4. rc.local:兼容性强,适合老旧系统或特殊场景

我们还通过一个具体的test.sh脚本演示了从创建、授权到部署的完整流程,并提供了常见问题的排查思路。

8.2 下一步建议

  • 如果你正在使用 Ubuntu 18.04 及以上版本,建议进一步学习systemd user services,它是现代 Linux 更强大的用户级服务管理方式。
  • 对于需要定时或条件触发的任务,可结合cronanacron使用。
  • 在生产环境中,务必做好日志记录和异常处理,提升脚本健壮性。

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 8:28:56

万物识别-中文-通用领域成本优化:中小企业部署实战案例

万物识别-中文-通用领域成本优化:中小企业部署实战案例 在当今竞争激烈的市场环境中,中小企业对智能化技术的需求日益增长,但往往受限于预算和算力资源。如何以低成本实现高价值的AI能力落地,成为许多团队关注的核心问题。本文聚…

作者头像 李华
网站建设 2026/4/25 22:23:35

GPUStack技术架构实战指南:构建企业级AI推理平台的完整方案

GPUStack技术架构实战指南:构建企业级AI推理平台的完整方案 【免费下载链接】gpustack Manage GPU clusters for running AI models 项目地址: https://gitcode.com/gh_mirrors/gp/gpustack 在当前AI模型规模指数级增长的背景下,企业面临着多GPU集…

作者头像 李华
网站建设 2026/4/25 22:35:04

Z-Image-Turbo输出目录解析:~/workspace/output_image路径详解

Z-Image-Turbo输出目录解析:~/workspace/output_image路径详解 Z-Image-Turbo_UI界面是一个直观、易用的图形化操作平台,专为图像生成任务设计。通过该界面,用户无需编写复杂代码即可完成从提示词输入到高清图像生成的全流程操作。整个UI布局…

作者头像 李华
网站建设 2026/4/29 4:24:02

定制化情感分类:SenseVoiceSmall输出标签重定义教程

定制化情感分类:SenseVoiceSmall输出标签重定义教程 1. 引言:让语音理解更贴近业务需求 你是否遇到过这样的问题:语音识别模型虽然能准确转写内容,但无法判断说话人的情绪状态?在客服质检、用户反馈分析或智能对话系…

作者头像 李华
网站建设 2026/4/17 19:44:09

Qwen3-1.7B语音合成联动:TTS接口集成步骤详解

Qwen3-1.7B语音合成联动:TTS接口集成步骤详解 你是否希望让Qwen3-1.7B不仅能“说”文字,还能真正“发声”?本文将带你一步步实现Qwen3-1.7B与TTS(文本转语音)系统的深度联动,完成从语言模型输出到语音播报…

作者头像 李华
网站建设 2026/4/29 9:21:28

FSMN VAD停止服务命令:kill -9端口正确用法

FSMN VAD停止服务命令:kill -9端口正确用法 1. FSMN VAD阿里开源的语音活动检测模型 构建by科哥 FSMN VAD 是基于阿里达摩院 FunASR 开源框架开发的一款高精度语音活动检测(Voice Activity Detection, VAD)模型,能够精准识别音频…

作者头像 李华