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

Ubuntu 23.10下启动脚本中rclone挂载OneDrive后notify-send无法正常发送通知的问题

Ubuntu 23.10下启动脚本中rclone挂载OneDrive后notify-send无法正常发送通知的问题

嗨,我来帮你捋捋这个问题~ 这种情况基本都是自启动脚本缺少桌面会话的关键环境变量导致的:你在终端运行脚本时,它继承了当前桌面会话的完整环境,但GNOME自启动管理器跑脚本时,没有加载这些变量,notify-send没法连接到桌面的通知服务,自然就看不到弹窗了。

下面给你两个实用的解决方案:

方案一:给自启动脚本补上必要的环境变量

方法1:修改自启动.desktop文件

打开你的.config/autostart/onedrive.sh.desktop,先确认Exec行的脚本路径是不是写错了(你当前写的是test-message.sh,要对应到实际的挂载脚本),然后改成这样:

Exec=bash -c 'export DISPLAY=:0; export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus; /home/ernesto/Documents/Scripts/你的挂载脚本.sh'

这段代码会在运行脚本前,先设置DISPLAY(指定桌面显示端口)和DBUS_SESSION_BUS_ADDRESS(通知服务的通信路径)这两个核心变量,让notify-send能找到桌面通知服务。

方法2:在脚本开头添加环境变量

直接在你的bash脚本最顶部(#!/bin/bash之后)加上:

# 配置桌面会话环境变量,确保notify-send正常工作
export DISPLAY=:0
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"

这样不管脚本在哪运行,都会先把必要的环境变量配置好。

方案二:用systemd用户服务替代GNOME自启动(更稳定)

如果经常遇到自启动脚本的环境问题,推荐用systemd用户服务来管理,它会自动继承桌面会话的环境,可靠性更高:

  1. 创建一个服务文件:
nano ~/.config/systemd/user/onedrive-mount.service
  1. 粘贴以下内容(记得替换脚本路径为你实际的挂载脚本路径):
[Unit]
Description=自动挂载OneDrive(rclone)
After=graphical-session.target

[Service]
Type=simple
ExecStart=/home/ernesto/Documents/Scripts/你的挂载脚本.sh
Restart=on-failure
RestartSec=5

[Install]
WantedBy=graphical-session.target
  1. 保存退出后,启用并启动服务:
systemctl --user enable --now onedrive-mount.service

这个服务会在桌面会话完全启动后再运行,不仅notify-send能正常弹出通知,就算挂载失败还会自动重试,比GNOME自启动更省心。

最后别忘了检查你的日志文件(~/onedrive_mount_error_log.txt和~/script_output_log.txt),确认挂载操作本身是否真的成功——有时候挂载失败也会导致通知不显示,但根据你的描述,终端运行正常,所以核心问题还是环境变量。

备注:内容来源于stack exchange,提问作者Anima94

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 09:17:57