我使用的是 Debian Jessie,没有桌面环境。我尝试使用 gvfs-mount 通过命令行挂载 FTP。
我在网上收集了一些信息,我了解到gvfs与dbus进行通信。
所以我的第一步是安装 dbus 和 gvfs 所需的软件包:
apt-get install dbus-x11 gvfs-bin gvfs-fuse
然后我重新启动,因为 dbus 安装了它自己的服务。
之后,我以 www-data 身份登录
sudo -Hu www-data -s /bin/bash
(-s /bin/bash
是因为该用户没有bash)
从这里,我必须dbus-daemon
为我的用户启动并导出结果,DBUS_SESSION_BUS_ADDRESS
以便 gvfs 与该守护进程进行通信。所以我这样做:
dbus-launch --sh-syntax > "$HOME/.dbus_settings"
.dbus_settings
包含类似以下内容:
cat .dbus_settings
DBUS_SESSION_BUS_ADDRESS='unix:abstract=/tmp/dbus-XwbyV2BmA5,guid=6c111d728c263543b61e6293570e1f22';
export DBUS_SESSION_BUS_ADDRESS;
DBUS_SESSION_BUS_PID=952;
我的环境变量DBUS_SESSION_BUS_ADDRESS
此时尚未设置,所以我运行:
export DBUS_SESSION_BUS_ADDRESS='unix:abstract=/tmp/dbus-XwbyV2BmA5,guid=6c111d728c263543b61e6293570e1f22'
为了处理未来的 gvfs 安装,我.gvfs
在我的用户中创建了一个文件夹$HOME
(对于 www-data 来说是/var/www
)
现在,我想(但我不确定)我已经准备好使用 gvfs。所以我启动gvfsd熔断器像这样:
/usr/lib/gvfs/gvfsd-fuse $HOME/.gvfs -o big_writes
这似乎有效。文件夹 $HOME/.gvfs 似乎已安装(但其中还没有任何内容)。
最后一个命令是有效的 FTP 挂载:
gvfs-mount ftp://myftpuser@myftpserver < file_containing_ftp_password
但是,我总是收到此错误:
Error mounting location: Location is not mountable
这些步骤适用于我的 Linux Mint 17.3 amd64 桌面。但我无法让它在 Debian Jessie 服务器上运行(没有桌面和 x11)。
任何帮助表示赞赏。
答案1
我发现了问题。缺少一个包gvfs-backends
,有些命令没用。
继续,步骤如下:
安装必要的包:
apt-get 安装 dbus-x11 gvfs-bin gvfs-fuse gvfs-backends
如果 .gvfs 文件夹不存在,则创建它
mkdir $HOME/.gvfs
启动 dbus 会话并存储
DBUS_SESSION_BUS_ADDRESS
以便能够重复使用它dbus-launch --sh-syntax > "$HOME/.dbus_settings"
导出
DBUS_SESSION_BUS_ADDRESS
使用source
例如源“$HOME/.dbus_settings”
只需使用 gvfs-mount 挂载即可
gvfs 安装ftp://myftpuser@myftpserver
Shell 将提示您输入密码。您还可以创建一个包含密码的文件并将其提供给 gvfs-mount,以便命令为:
gvfs-mount ftp://myftpuser@myftpserver < file_containing_my_ftp_password
在此位置访问您安装的 FTP:
cd $HOME/.gvfs/ftp:主机\=myftpserver\,用户\=myftpuser/
完毕 !
答案2
最好用一下dbus-run-session some-script.sh
,然后可以调用gio mount
里面的或者其他gio工具some-script.sh
。
dbus-run-session 将在脚本执行后杀死 dbus-daemon,或者如果您使用 .dbus-run-session,则需要手动杀死 dbus-daemon dbus-launch
。
使用 dbus-run-session 会有点麻烦,因为你需要编写另一个脚本并用命令 dbus-run-session 调用它。
你可以这样做:
#!/bin/sh
sed '1,/^exit$/d' $0 | dbus-run-session sh
exit
ftp_url=ftp://[email protected]/
ftp_password=password
echo $ftp_password | gio mount $ftp_url
ftp_gio_name=$(
gio info $ftp_url | awk '$1 == "id::filesystem:" { print $2 }'
)
ftp_gio_path=$HOME/.gvfs/"$ftp_gio_name"
archive_path=$HOME/data
cp --archive --verbose --update \
"$ftp_gio_path"/ \
$archive_path
gio mount -u $ftp_url
或使用尾部:
#!/bin/sh
tail +4 $0 | dbus-run-session sh
exit
# script here
或使用heredoc:
dbus-run-session sh <<DBUS_SESSION
# script here
# but you need to escape $ and \
foo=bar
echo \$foo
touch white\\ space
DBUS_SESSION