Dropbox

出自 ArchWiki

Dropbox 是一个文件共享系统,带有 GNU/Linux 客户端。使用它可以透明地跨计算机和架构同步文件。只需将文件放入您的 ~/Dropbox 文件夹,它们将自动同步到您的中央存储库。

安装

AUR

dropboxAUR 可以被安装。作为最后的手段,Dropbox 网站提供了通过命令行进行无头安装的说明。

  1. 安装软件包后,您可以从应用程序菜单启动 Dropbox,或从命令行运行 dropbox。客户端图标将出现在系统托盘中。
  2. 一个弹窗会通知您 Dropbox 正在从不受支持的位置运行。点击不再询问,因为您知道您是从 AUR 而不是官方主页安装的它。
  3. 最终,一个弹窗会要求您登录您的 Dropbox 账户或创建一个新账户。输入您的凭据。
  4. 一段时间后,您将看到“欢迎使用 Dropbox”弹窗,它将让您有机会观看 Dropbox 的简短教程。
  5. 按下“完成并转到我的 Dropbox”。

必需软件包

在首次启动 dropboxAUR 之前,必须安装 python-gpgme。否则,程序将无法在下次启动时签名二进制文件和验证签名。出于某种原因,dropboxAUR 没有将此软件包标记为必需的依赖项,但它仍然是必需的。

可选软件包

命令行界面 dropbox-cliAUR
GNOME/文件 集成 nautilus-dropboxAUR
Nemo 集成 nemo-dropboxAUR
Thunar 集成 thunar-dropboxAUR
Dolphin 集成 dolphin-plugins
Caja 集成 caja-dropboxAUR

请注意,要访问 GUI 和设置,唯一的方法是通过托盘图标。您需要一个带有系统托盘的 X 面板或一个独立的系统托盘应用程序

阻止自动更新

自从至少 2.4.6 版本(参见 AUR 上 2013-11-06 左右的评论)以来,Dropbox 具有自动更新功能,该功能会将新的二进制文件下载到 ~/.dropbox-dist/ 文件夹。然后,该服务尝试将控制权移交给此二进制文件并终止,导致 systemd 重新启动该服务,从而产生冲突和无休止的日志填充、CPU 占用问题。

一种解决方法是通过创建 ~/.dropbox-dist/ 文件夹并将其设为只读来阻止 Dropbox 下载自动更新

$ rm -rf ~/.dropbox-dist
$ install -dm0 ~/.dropbox-dist

这对于现代 Dropbox 客户端在 arch 上从 systemd 成功运行似乎是必要的。

另请参阅相关的 Dropbox 论坛帖子

自动启动

在 Dropbox 首选项中的“通用”选项卡下,应该有一个“系统启动时启动 Dropbox”复选框。尝试选中此框,看看 Dropbox 是否自动启动。

如果这不起作用,请取消选中该框并使用以下方法之一代替

通过 WM/DE 自动启动

对于 KDE 用户,无需执行其他步骤,因为 KDE 会在注销时保存正在运行的应用程序,并在重新登录时自动重启它们。对于 Xfce 用户也是如此,Dropbox 将在您下次登录时自动重启,因为 dropbox.desktop 文件已放置在 ~/.config/autostart 中。

对于 Cinnamon 用户,建议通过配置启动应用程序并稍作延迟来启动 Dropbox 客户端(Cinnamon 问题 #4396)。使用 systemd 启动 Dropbox 可以工作,在后台运行,但由于某些 Cinnamon 错误(#481#2846),系统托盘上没有图标。

如果这不起作用,您可以将 /usr/bin/dropbox & 添加到您的 xinitrc(或 ~/.config/openbox/autostart,取决于您的设置)中,以便在启动窗口管理器时启动 Dropbox 同步客户端。

使用 systemd 在启动时自动启动

注意: 如果systemd 不断重启 Dropbox,请参阅 #阻止自动更新

要使 Dropbox 在系统启动时自动启动,只需启用 systemd 服务,并将您的用户名作为实例标识符传递。要启用的服务单元采用 dropbox@username 格式。

默认情况下,运行该服务不会在系统托盘中为您提供图标,因为它不知道要使用哪个 X 显示。如果您想要托盘支持,请为提供的服务使用drop-in 文件DISPLAYXAUTHORITY 都需要正确设置才能显示图标。%i 将被替换为服务的实例名称,在本例中为 username

/etc/systemd/system/dropbox@username.service.d/override.conf
[Service]
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/%i/.Xauthority

请注意,使用上述编辑后,除非启动 X 会话,否则 Dropbox 将无法启动。

使用 systemd 在登录时自动启动

要使 Dropbox 在您登录时自动启动,只需启用 用户服务

如果您希望 Dropbox 出现在您的系统托盘中,您将需要编辑 用户单元,以便它知道系统托盘位于哪个 X 显示中。DISPLAYXAUTHORITY 都需要正确设置才能显示图标,username 需要替换为您在系统上的用户名

~/.config/systemd/user/dropbox.service.d/override.conf
[Service]
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/username/.Xauthority

请注意,使用上述编辑后,除非启动 X 会话,否则 Dropbox 将无法启动。

无需安装同步客户端访问文件

如果您只需要基本访问 Dropbox 中的文件,您可以使用 https://www.dropbox.com/ 上的 Web 界面来上传和下载文件到您的 Dropbox。这可以替代运行 Dropbox 守护程序并在您自己的机器上镜像所有文件。

rclone 软件包为许多云存储服务(包括 Dropbox)提供命令行界面。

加密您的 Dropbox 文件

如果您想在 Dropbox 中存储敏感数据,您应该先对其进行加密。同步到 Dropbox 是加密的,但所有文件(目前)都以未加密的形式存储在服务器上,就像您将它们放入 Dropbox 中一样。

  • Dropbox 可以与 TrueCrypt 一起使用,并且在您最初将 TrueCrypt 卷上传到 Dropbox 后,性能相当不错,因为 Dropbox 具有可用的二进制差异。
  • 另一种可能性是使用 EncFS,它的优势在于所有文件都是单独加密的,即您不必预先确定要加密的内容的大小,并且您的加密目录会在您在其中添加/删除/修改文件时增长和缩小。您还可以使用 encfs-S 选项在启动时挂载加密卷,以避免输入密码,但请注意,您的加密文件对于直接访问您计算机的人来说并不安全。
  • 第三种选择是使用 gocryptfs。它与 EncFS 类似,不同之处在于 gocryptfs 使用经过身份验证的加密,以保护数据的机密性和完整性(防篡改)。

另请参阅 静态数据加密#云存储优化

使用 EncFS 设置 Dropbox

按照 Wiki 说明安装 EncFS

假设您已将 Dropbox 目录设置为 ~/Dropbox

创建一个文件夹。您要同步到 Dropbox 的文件将放在这里。

$ mkdir ~/Private

运行以下命令并在询问时输入密码

$ encfs ~/Dropbox/Encrypted ~/Private

您的安全文件夹已准备就绪;在 ~/Private 中创建任何文件都会自动将其加密到 ~/Dropbox/Encrypted 中,然后将其同步到您的云存储。如果您希望再次手动挂载 EncFS 文件夹,也可以使用相同的命令。

要在每次启动时挂载您的 EncFS 文件夹,请按照 EncFS wiki 页面中的说明进行操作。

提示: 考虑使用 ENCFS6_CONFIG 变量并将 .encfs6.xml 文件移动到另一个位置(例如 USB 闪存盘),以帮助确保您的加密数据和实际解密它的方法不会同时在线存在。

多个 Dropbox 实例

如果您需要分隔或区分您的数据,例如个人和工作用途,您可以使用不同的电子邮件地址订阅 Dropbox,并让不同的 Dropbox 实例在单台机器上同步它们的目录。

基本原理和一般操作方法在 Dropbox Wiki 中描述。

总结一下,您可以使用以下命令设置新的或额外的实例

mkdir /path/to/.dropbox-alt-1
HOME=/path/to/.dropbox-alt-1 /usr/bin/dropbox start -i

完成后,停止任何仍在运行的 Dropbox 实例,并像这样启动它们

HOME=/path/to/.dropbox-alt-1 /path/to/.dropbox-alt-1/.dropbox-dist/dropboxd
HOME=/path/to/.dropbox-alt-2 /path/to/.dropbox-alt-2/.dropbox-dist/dropboxd

注意使用不同的 .../.dropbox-dist/dropboxd 二进制文件。即使设置了自定义 HOME 值,/opt/dropbox/dropbox/opt/dropbox/dropboxd 包装器也只允许一个实例,并且在启动时它们会杀死已经运行的实例。

笔记本电脑上的 Dropbox

Dropbox 本身非常擅长处理连接问题。如果您有笔记本电脑并在不同的网络环境之间漫游,如果您不重新启动 Dropbox,Dropbox 将在重新连接时遇到问题。首先尝试以下描述的方法之一, 如果由于某种原因问题仍然存在,您可以尝试以下黑客解决方案:[1][2]

注意: 当使用这些方法中的任何一种时,您需要通过取消选中Dropbox - 首选项 - 通用 - 系统启动时启动 Dropbox来阻止 Dropbox 执行标准自动启动。这可以防止 Dropbox 创建 ~/.config/autostart/dropbox.desktop 文件,从而防止启动两次。

使用 netctl

对于 netctl,在您使用的每个网络配置文件中分别使用 ExecUpPostExecDownPre,或者例如在 /etc/netctl/interfaces/wlan0 中,以便在 wlan0 上的配置文件处于活动状态时自动启动 Dropbox。在您的命令中添加 '|| true' 以确保 netctl 将启动您的配置文件,即使 Dropbox 启动失败。

ExecUpPost="any other code; su -c 'DISPLAY=:0 /usr/bin/dropbox &' your_user || true"
ExecDownPre="any other code; killall dropbox"

显然,必须编辑 your_user,如果您没有任何其他代码,则可以省略 any other code;。以上操作将确保 Dropbox 仅在有网络配置文件处于活动状态时运行。

使用 NetworkManager

对于 NetworkManager,请使用其调度器功能。

创建以下文件

/etc/NetworkManager/dispatcher.d/10-dropbox.sh
#!/bin/sh
USER=''your_user''
status=$2
case $status in
       up)
		su -c 'DISPLAY=:0 /usr/bin/dropbox & ' $USER
       ;;
       down)
       		killall dropbox
       ;;
esac

或者,对于 systemd 替代方案

/etc/NetworkManager/dispatcher.d/10-dropbox.sh
#!/bin/sh
USER=''your_user''
status=$2

case $status in
       up)
		systemctl start dropbox@$USER.service
       ;;
       down)
       		systemctl stop dropbox@$USER.service
       ;;
esac

不要忘记将脚本的所有者更改为 root 并使其可执行。

故障排除

Dropbox 在启动时请求 root 权限

这可能是因为它尝试修复它不接受的权限。当您在 Arch 和 Windows 使用的分区上使用 btrfs,并且忘记配置 Windows 驱动程序以使用正确的 UID 和 GID 时,可能会发生这种情况。检查是否是这种情况

find ~/Dropbox -user nobody

修复权限并正确配置您的驱动程序。请求 root 权限的模态框应自动消失。

请注意,如果 Dropbox 文件夹内的任何文件的权限不正确,而不仅仅是 Dropbox 文件夹本身,则可能会出现这种情况。

Dropbox 一直显示“正在下载文件”

但实际上现在文件已与您的 Dropbox 同步。当您的 Dropbox 文件夹位于 NTFS 分区上,并且其挂载路径包含空格,或者未设置该分区的权限时,很可能会出现此问题。有关更多信息,请参见论坛。要解决此问题,请注意您的 /etc/fstab 中的条目。避免在挂载路径中使用空格,并使用“default_permissions”选项设置写入权限

UUID=01CD2ABB65E17DE0 /run/media/username/Windows ntfs-3g uid=username,gid=users,default_permissions 0 0

从安装向导更改 Dropbox 位置

一些用户在设置 Dropbox 期间遇到问题,他们无法选择 /home/username/Dropbox 以外的 Dropbox 文件夹。在这种情况下,当显示用于更改路径的窗口时,点击 Ctrl+l,输入位置(例如 /mnt/data/Dropbox)并点击选择打开按钮。

文件管理器中的上下文菜单条目不起作用

Thunar、GNOME 文件或其分支 Nemo 等多个文件管理器都带有扩展程序,这些扩展程序为 Dropbox 中的文件和文件夹提供上下文菜单条目。它们中的大多数将导致浏览器操作,例如在 dropbox.com 中打开文件或文件夹或共享链接。如果您遇到这些条目不起作用的情况,则可能是您没有设置 Dropbox 需要的 $BROWSER 变量。有关详细信息,请参阅环境变量

正在连接...

可能会发生 Dropbox 无法成功连接,因为它在建立互联网连接之前加载,如多个帖子(多年来帖子)中所述。这可能发生在无线连接或有线网络上的快速加载机器上。对于有线和无线连接,解决此问题的最佳方法是#笔记本电脑上的 Dropbox,这将确保仅在建立连接后才启动 Dropbox。

对于那些不使用 netctl 或 NetworkManager 的用户,另一种解决方案是延迟 Dropbox 的启动

  • cp ~/.config/autostart/dropbox.desktop ~/.config/autostart/dropbox-delayed.desktop
  • 通过取消选中 Dropbox - 首选项 - 通用 - 系统启动时启动 Dropbox 来阻止 Dropbox 执行标准自动启动。这将删除 ~/.config/autostart/dropbox.desktop
  • 编辑 ~/.config/autostart/dropbox-delayed.desktop 并将 Exec=dropbox 替换为 Exec=bash -c "sleep timeout && dropbox"。调整 timeout 参数,3 的值是一个好的开始。

另一种可能性是 Arch Linux 默认更新并安装 dbus-broker,恢复到 dbus-daemon-units 将解决此问题,Dropbox 似乎不支持 dbus-broker。

Dropbox 无法启动 - “这通常是由于权限错误”

检查权限

在运行应用程序之前,请确保您拥有 Dropbox 的目录。这包括

  • ~/.dropbox - Dropbox 的配置目录
  • ~/Dropbox - Dropbox 的下载目录(默认)

您可以使用 chown -R 更改其所有者来确保这一点。

此错误也可能是由 /var 已满引起的。

重新链接您的账户

Dropbox 的 FAQ 建议此错误可能是由配置错误引起的,并且可以通过(重新)移动当前配置文件夹来修复

# mv ~/.dropbox ~/.dropbox.old

并重启 Dropbox。

空间不足导致的错误

可能发生的常见错误是您的 /tmp/var 分区上没有更多可用空间。如果发生这种情况,Dropbox 将在启动时崩溃,并在其日志中显示以下错误

Exception: Not a valid FileCache file

可以在论坛中找到此类事件的详细故事。在启动 Dropbox 之前,请确保有足够的可用空间。

另一种情况是根分区已满

OperationalError: database or disk is full

使用 df 检查分区上的可用空间。

文件系统监控问题

如果您的 Dropbox 文件夹中有很多文件要同步,您可能会收到以下错误

Unable to monitor filesystem
Please run: echo 100000 | sudo tee /proc/sys/fs/inotify/max_user_watches and restart Dropbox to correct the problem.

这可以通过添加

fs.inotify.max_user_watches = 100000

/etc/sysctl.d/99-sysctl.conf,然后重新加载内核参数来轻松修复

# sysctl --system

代理设置

设置 Dropbox 的代理设置的最简单方法是在“首选项”窗口的“代理”选项卡中手动定义它们。或者,您也可以将其设置为“自动检测”,然后在启动 Dropbox 之前将您的代理服务器导出到 http_proxy 环境变量(HTTP_PROXY 也可用)

env http_proxy=http://your.proxy.here:port /usr/bin/dropbox

export http_proxy=http://your.proxy.here:port
/usr/bin/dropbox
注意: Dropbox 将仅使用 http://your.proxy.here:port 形式的代理设置,而不是像某些其他应用程序那样使用 your.proxy.here:port

GNOME 中缺少托盘图标

GNOME 3.26 在 bug 785956 中删除了对托盘图标的支持,这将阻止 Dropbox 图标显示。要恢复托盘图标,需要安装适当的扩展程序,例如 App Indicator

Cinnamon 中缺少托盘图标

由于 Cinnamon 正在使用 XApp.StatusIcon(替换 GNOME 中已弃用的 Gtk.StatusIcon,见上文),以通过 dbus 在多个桌面环境中传递信息,请确保您已安装 XApp Status Applet (xapp-status) 并将其添加到面板,否则 Dropbox 状态图标可能根本不显示。

wlroots (sway, river) 中缺少托盘图标

在环境中以 DISPLAY=:0DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus 启动 Dropbox 似乎可以解决问题。已使用 waybar(使用 SNI)进行测试。

无法打开登录对话框

如果尝试打开系统托盘登录选项失败,尤其是在 i3-wm 中,则可能是因为缺少 qt5 依赖项。安装 qt5-base