问题描述
几个小时前,Xubuntu 14.04中的保管箱图标停止工作。该图标是黑色的,并带有红色的斜线。我不能点击它来调出保管箱菜单。我相信在发生这种情况之前有一个更新。我重新安装,然后清除Dropbox。我甚至删除了所有关联文件和隐藏文件夹,并在我重新安装之后。但是,图标不起作用。试图停止并开始服务……再没有。
最佳解决办法
刚刚在我的Xubuntu 15.10上出现了这个错误,破坏了图标,无法打开菜单。我认为这个bug连接到Dropbox开始使用”indicator area”来代替”notification area”的托盘图标,而且sudo-fix正好工作,因为有些环境变量没有与sudo会话一起使用。
至少对我来说,这个问题可以通过运行来解决:
dropbox stop && DBUS_SESSION_BUS_ADDRESS="" dropbox start
这似乎将图标移回到修复图标和菜单的”notification area”。这样守护进程就像普通用户一样运行,而不是以root身份运行。
编辑:如果您基于此修补程序为Dropbox创建了自己的启动脚本,请记住使用“dropbox autostart n
”命令禁用默认启动脚本(谢谢StockBreak for this,为我节省了一些时间)。
EDIT2:…出于某种原因,我仍然必须从Dropbox GUI中删除自动启动设置(在系统启动时单击图标>>首选项>>启动Dropbox)。希望它在此之后保持关闭。
编辑:要在每次会话开始时运行的脚本中实现此修补程序,请尝试此解决方案:https://askubuntu.com/a/795864/496493
次佳解决办法
由File C.提出的新解决方法是“dbus-launch dropbox start -i”。
以下适应性报告由用户至少在Linux发行版Fedora,Gentoo,Kubuntu,Linux Mint,openSUSE,Slackware,Ubuntu,Xubuntu和桌面环境Cinnamon,KDE 4,KDE 5,Mate,Unity, XFCE …
这种新的dbus-launch解决方法似乎以比以前的DBUS_SESSION_BUS_ADDRESS解决方案更多的方式工作得更快一些,具有更高的可靠性。
作为命令行:
dropbox stop && dbus-launch dropbox start
或者作为一个shell脚本文件:
#!/bin/bash
dropbox stop && dbus-launch dropbox start
第三种解决办法
与kk78提出的解决方案不同,以下方法一劳永逸地解决了这个问题:
-
关闭Dropbox。
-
用文本编辑器打开
/usr/bin/dropbox
文件(作为管理员)。例如,在终端运行gksudo gedit /usr/bin/dropbox
-
在
import os
后创建一个新行并添加以下内容:os.environ['DBUS_SESSION_BUS_ADDRESS'] = ""
-
保存并重新启动
现在Dropbox会正常工作:
第四种办法
感谢kk78的解决方案,我做了这个完整的解决方法(另请参阅我的other post):
我复制了*我的桌面条目:
cp ~/.config/autostart/dropbox.desktop ~/.config/autostart/start_dropbox.desktop
改变了这样的条目(请注意env
字):
[Desktop Entry]
Name=Dropbox
GenericName=File Synchronizer
Comment=Sync your files across computers and to the web
#Exec=dropbox start -i
Exec=env DBUS_SESSION_BUS_ADDRESS="" dropbox start -i
Terminal=false
Type=Application
Icon=dropbox
Categories=Network;FileTransfer;
StartupNotify=false
并禁用Dropbox的自动启动功能:
dropbox autostart n
*您不能只编辑它,因为Dropbox每次登录时都会替换文件。
第五种办法
[这是我弃用的早期答案,现在不断研究这个和相关的错误;为更新和更好的解决方法,没有sudo的文件所有权更改/恢复不便,请参阅kk78的答案,或者在另一个答案中命令行"dropbox stop && dbus-launch dropbox start"
]
此Dropbox托盘图标错误似乎与权限有关。
在修复之前,从命令行(Konsole,Terminal等)开始临时解决这个问题,目前正在为Xubuntu,Linux Mint等用户工作:
dropbox stop
sudo dropbox start
注意:
关于”sudo”,以root身份运行Dropbox克服了权限错误,并且托盘图标再次正常工作。
然而,它具有很小的副作用,即在隐藏文件夹〜/.dropbox /拥有几个文件而不是用户(正如你可以看到的,例如像Dolphin这样的文件管理器),因此根密码在启动Dropbox时请求。
这可以作为暂时的解决方法,让Dropbox托盘图标在Linux上完全工作,直到错误有望通过下一次更新修复,但是如果修复程序没有恢复正确的权限,那么在该假设情况下,错误后的快速解决方案修复将是:
sudo dropbox stop
sudo chown -R USER:GROUP /home/USER/.dropbox
dropbox start
当然,更换USER和GROUP。例如,如果你是Unix,UTF-8,Go语言等的co-creator;)它会是这样的:
sudo chown -R ken:ken /home/ken/.dropbox
更新:
对不起,我刚刚看到了一些让临时解决方法仍然可行但不太方便的方法:不仅少数人已经提到隐藏的〜/.dropbox文件夹中的文件被root用户所拥有,还有从Dropbox服务器下载到Dropbox的文件以root用户身份运行Dropbox的计算机上的文件夹(通常是〜/Dropbox)。
因此,我仍然在使用此解决方法,直到修复错误,但如果我们想要使用它,我们必须将权限恢复行也应用到Dropbox文件夹,至少在我们要编辑我们下载的文档时。例如:
sudo chown -R USER:GROUP /home/USER/Dropbox
为了节省时间,并在启动计算机时应用它,我们可以将其包含在一个简单的shell脚本中,例如,一个带有可执行属性的dropbox.sh文本文件,我们可以从命令行或鼠标单击运行该文本文件:
#!/bin/bash
dropbox stop
sudo dropbox start
sudo chown -R USER:GROUP /home/USER/Dropbox
简单的替代解决方法:
如果处理文件所有权更改和恢复等操作太不方便,最简单的方法可能就是等待Dropbox错误修复而不使用图标,并且不时检查Dropbox状态使用命令行:
dropbox status
结果,如果Dropbox正在运行,大部分时间将是:“最新”。
稍后,可能可以使用向上箭头从可以保持打开状态的小命令行窗口中再次快速运行此行。
只需键入以下内容即可查看其他命令行帮
dropbox
如上所述,要停止使用其他解决方法(sudo),恢复正常的文件所有权,然后以普通用户而不是root身份再次运行Dropbox,只需使用一次(替换USER和GROUP):
sudo dropbox stop
sudo chown -R USER:GROUP /home/USER/Dropbox
sudo chown -R USER:GROUP /home/USER/.dropbox
sudo chown -R USER:GROUP /home/USER/.dbus
dropbox start
新的更新:
请参阅kk78对此问题的回答,采用比我更好的解决方法,并将Dropbox托盘图标视为普通用户,而不是root用户。它至少适用于Xubuntu和Linux Mint。
它也可以用作shell脚本:
#!/bin/bash
dropbox stop && DBUS_SESSION_BUS_ADDRESS="" dropbox start
第六种办法
我决定使用这个脚本代替小图标,而不是停留在旧版本或其他方面。它将命令dropbox status
的输出直接放到面板中。但是,在同步或最新时,会有一个复选标记或同步字符。
通过在终端中粘贴以下内容来安装通用监视器:
sudo apt-get install xfce4-genmon-plugin
将以下脚本设置为使用“通用监视器”面板插件运行。我没有标签并将其设置为每五秒运行一次。
#!/bin/bash
status=$(dropbox status)
if [ "$status" = "Up to date" ]; then
echo "✔"
elif [[ "$status" == "Syncing"* ]] || [[ "$status" == "Indexing"* ]] || [[ "$status" == "Downloading"* ]]; then
echo "⟲"
else
echo "$status"
fi
您需要运行以下内容,以便在登录时不显示密码提示(反正可以忽略):
sudo chown -R USER:GROUP ~/.dropbox
USER:GROUP
通常只是您的用户名两次。
当我需要更改设置时,我将只使用sudo
启动Dropbox来更改我的设置。如本页所述,使用sudo
启动会显示小图标和菜单。
另外,如果您喜欢,可以回显出your own Dropbox icon或图像。如果您的Dropbox命令行不起作用,您可以下载Dropbox python脚本here。 (在我的情况下,我没有使用Dropbox python脚本名称的* .py扩展名。)
第七种办法
我按如下方式修改了~/.dropbox-dist/dropboxd
脚本,并重新启动并取回了图标。由于该文件被更新覆盖,我认为如果他们在下一次更新中解决了问题,我将不必撤消任何操作。
#!/bin/sh
export DBUS_SESSION_BUS_ADDRESS=""
PAR=$(dirname "$(readlink -f "$0")")
exec "$PAR/dropbox-lnx.x86-3.14.7/dropboxd" "$@"
更新:当我在笔记本电脑上试用此功能时,它一开始并不奏效。我意识到我遇到了与’Copy’相同的问题,其中在正式启动文件执行之前,XFCE4会话保存已开始投入使用。我修改了我的〜/.profile文件以清除~./cache/sessions
中的任何* .state和* session *文件
rm -f /home/jhm/.cache/sessions/*.state
rm -f /home/jhm/.cache/sessions/*session*
更新#2:所以现在使用3.18.1版本,问题仍然存在。我知道,因为,正如我所预测的那样,每次更新都会覆盖~/.dropbox-dist/dropboxd
脚本,导致每次都返回问题。上面的修复程序在Xubuntu 14.04启动时可靠地工作提供的会话恢复不会直接启动二进制文件:
/home/<user>/.dropbox-dist/dropbox-lnx.x86-3.18.1/dropbox
使用“系统/会话和启动”,在”Session”选项卡下,我可以看到二进制文件是可见的,如果我没有删除*会话和*状态文件,将会重新启动。
作为一个实验,我尝试在会话跟踪开始之前使用Upstart启动Dropbox。首先我创建了/home/jhm/.init
文件夹,然后添加一个名为dropbox.conf
的文件,其中包含:
description "Dropbox"
start on desktop-start
expect daemon
exec /usr/bin/dropbox start
我在戴尔笔记本电脑Xubuntu 14.04上使用了这种方法,该程序现在隐藏了会话跟踪,因此我不需要删除文件。
由于dbus-launch
创建一个新的专用DBUS会话总线,所以DropBox永远不会找到appindicator服务,因为它将是该总线上唯一的进程(非DBUS),因此与export DBUS_SESSION_BUS_ADDRESS=""
大致相同这两种解决方案都会导致DropBox退回到系统托盘API。这在XFCE Panel Items选项卡中称为’Notification Area’。确保它没有从面板上移除。
使用d-feet
和dbus-monitor
,我发现问题是DropBox无法在non-existant ‘/MenuBar’ DBUS路径上实现’Menu’接口。 DBUS粉丝可以通过d-feet
探索org.kde.StatusNotifierWatcher
以了解更多信息。由于Dropbox二进制文件负责支持这些接口,因此无需等待下一次更新。顺便说一句,所有需要的QT5.5库都包含在该程序中。无需下载开发包。
我还发现,只有GUI对话框似乎可靠地保持启动文件不会重新安装。一旦“在系统启动时启动DropBox”未被选中,它就会保持这种状态。
第八种办法
我运行相同的操作系统,Xubuntu 14.04 x64,并且看到这个对点击无响应的图标(没有菜单):
3.14.5的发行说明(于2016年2月9日到达并安装在我的机器上)声明Dropbox已更新为在Linux上使用Qt 5.5。
运行以下命令可以在我的机器上运行Qt版本:
~$ qmake -v
QMake version 3.0
Using Qt version 5.2.1 in /usr/lib/x86_64-linux-gnu
这些是我采取的步骤:
sudo apt-add-repository ppa:beineri/opt-qt551-trusty
sudo apt-get update
sudo apt-get install qt-latest qtcreator-latest
然后在~/.bashrc
中设置以下内容并重新启动会话:
export QT_SELECT=opt-qt55
我验证了我现在安装了Qt 5.5:
~$ qmake -v
QMake version 3.0
Using Qt version 5.5.1 in /opt/qt55/lib
然后,重新安装Dropbox并重新启动会话:
sudo apt-get remove dropbox
sudo apt-get install nautilus-dropbox
不幸的是,这不起作用,托盘图标显示相同。
然后,我想知道是否从Xfce4面板上移除Indicator Plugin会起作用。
-
删除指标插件
-
~? dropbox stop && dropbox start
然后,突然,通知面板中会出现一个通配符图标!
看起来Dropbox图标喜欢驻留在通知面板中,而不是指示器插件。
但是…我喜欢Indicator Plugin,因为它给了我电子邮件警报和音量控制。所以,我re-added它的面板。到现在为止还挺好。
但是,在re-starting会议之后,我再次得到这个废话:
所以,现在我卡住了。我不知道如何让Dropbox图标出现在通知面板而不是指示面板中,我确定每次登录时都不会重复这些步骤!
第九种办法
这解决了它。
在Dropbox菜单上,转到首选项。取消选择“在系统启动时启动Dropbox”
进入会话和启动>应用程序自动启动并添加以下启动项目:
bash -c 'export DBUS_SESSION_BUS_ADDRESS="" && dropbox start -i'
参考资料