当您在 KDEConnect 中按下“浏览此设备”时,如果尚未安装,它会通过 sftp 安装该分区。
如何以编程方式执行此操作,以便我可以始终安装设备并且不会自动按下此按钮?
我尝试在按下“浏览此设备”按钮后以类似于 KDEConnect 的方式进行安装:
$ mount | grep kdeconnect
[email protected]:/ on /run/user/1000/xxxxxxxxxxxxxxxx type fuse.sshfs (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
因此制定了这个命令:
mkdir -p /run/user/1000/xxxxxxxxxxxxxxxx
sudo mount -v -t fuse.sshfs \
-o rw,nosuid,nodev,uid=1000,gid=1000 \
[email protected]:/ /run/user/1000/xxxxxxxxxxxxxxxx
但它会导致以下错误:
read: Connection reset by peer
或者,如果分区尚未挂载,是否可以简单地触发 KDEConnect 来挂载分区?它有一个kdeconnect-cli
控制台工具,但它缺少这样的选项。
答案1
发生错误的原因是该命令尝试连接到手机的 22 端口并使用你的SSH 密钥。为了挂载 KDE Connect 公开的文件系统,您应该使用其端口和 SSH 密钥。
在我的手机上,该端口是1740
(您可以检查您的电脑上是否也运行相同的端口)。并且我的系统中的netstat
KDE Connect 密钥是。~/.config/kdeconnect/privateKey.pem
因此您应该能够使用以下命令执行挂载:
sshfs -o rw,nosuid,nodev,identityfile=$HOME/.config/kdeconnect/privateKey.pem,port=1740 kdeconnect@PHONE_IP:/ MOUNT_POINT
记得相应地替换PHONE_IP
和MOUNT_POINT
。还请注意,我使用sshfs
而不是,mount
因为它可以让非特权用户更轻松地进行安装。
更多信息这里。
答案2
您可以要求 KDE Connect 的守护进程(如果正在运行,但我认为在您的例子中它会运行)使用 D-Bus 为您安装它:
busctl --user call org.kde.kdeconnect /modules/kdeconnect/devices/xxxxxxxxxxxxxxxx/sftp org.kde.kdeconnect.device.sftp mountAndWait
busctl
带有 systemd,因此它应该已经安装在常规 Ubuntu 安装中(的手册页busctl
),但是也存在其他用于从 CLI 执行 D-Bus 方法的工具。
(你可以使用以下 UI 工具检查 D-Bus 上还有哪些方法可用:D-脚)