iPhone USB 连接在我的 20.04 上运行良好,这很棒。
我获得了网络(网络共享),并可以访问“文档”(DCIM 图片等...)。
但是,我通常只需要网络,不需要文档/图片。
实际上,我并不太在意看到手机文档挂载,但在桌面登录后,界面需要大约 10 秒钟才能出现,因为 Ubuntu 正在读取我不需要的 iPhone 文档树。真
烦人。
是否有一些配置可用于 Ubuntu不是登录桌面后还要关心 iPhone 文档吗?(比如,不安装任何 iPhone)
答案1
这是通过 Gnome 桌面中的 进行控制的gio
,因此有两种可能的方法可以实现这一点:
- 通过以下方式更改自动挂载设置
dconf-editor
- 用于
/etc/fstab
防止安装存储设备 - 设置脚本,在您登录并连接设备时自动卸载 iPhone
第一个选项的问题在于,更改自动挂载设置是全局的,而不是每台设备,因此将其设置为false
意味着插入 USB 设备将意味着打开终端并手动将设备安装到计算机上。这在 90 年代很有趣,但人们很快就会厌倦记住哪个 USB 记忆棒或外部硬盘驱动器具有哪个文件系统。
第二种选择的问题在于,如果您使用 Gnome,它通常不起作用,因为无论有什么noauto
要求,设备都会继续加载。
第三个选项的问题在于真的碰运气,因为 Gnome 桌面会知道手机已连接,并继续尝试通过 安装该设备gio
。
话虽如此,你还是可以自由选择。我在我的联想 ThinkPad 上尝试了这些选项,但收效甚微……主要是因为 Gnome 想要玩硬球。
选项 1:更改自动安装设置
如果你还没有dconf-editor
,你需要安装它:
sudo apt install dconf-editor
从那里,您可以dconf-editor
在终端中输入内容,然后会出现一个基本的 GUI,用于浏览 Gnome 的大量设置。转到/ org / gnome / desktop / media-handling /
,您会在顶部看到“自动挂载”。您可以将其关闭。
或者,您也可以关闭插入存储设备时打开 Nautilus 的选项,这可以减少您在手机上进行网络共享时感觉到的摩擦。
笔记:这是一个全局设置,因此每个设备如果您选择禁用自动挂载,将会受到影响。
选项 2:更新/etc/fstab
至不是安装手机
要使此功能正常工作,您需要知道手机的 UUID。幸运的是,这并不难解决。从终端运行此命令:
lsusb -v 2> /dev/null | grep -e "Apple Inc" -A 2
对于我的 iPhone 6s,我看到的输出如下:
iManufacturer 1 Apple Inc.
iProduct 2 iPhone
iSerial 3 3575bbd12605efd9f1f97521683d82f34e9ac141
UUID 是iSerial
值。
可以像这样添加/etc/fstab
:
UUID=3575bbd12605efd9f1f97521683d82f34e9ac141 /mnt/iPhone fuse noauto 0 0
该UUID
值与 相同iSerial
,由于各种原因,/mnt/iPhone
挂载点是 之外的非真实位置。指的是文件系统,实际上是 APFS 并通过 Fuse 读取。说“不自动挂载此设备”。/media
fuse
noauto
总而言之,/etc/fstab
如果我在手机连接到 USB 端口时登录,此行会阻止照片在 Nautilus 中显示,除此之外没有其他作用。连接手机后设备已完全启动将导致手机出现在 Nautilus 文件管理器中。
选项 3:自动卸载手机存储
这个选项有点复杂。首先你需要识别在哪里手机支架。可通过以下方式完成gio
:
gio mount --list
这会给你类似这样的结果:
Drive(0): SAMSUNG MZVLW512HMJP-000L7
Type: GProxyDrive (GProxyVolumeMonitorUDisks2)
Volume(0): [email protected]
Type: GProxyVolume (GProxyVolumeMonitorGoa)
Volume(1): iPhone
Type: GProxyVolume (GProxyVolumeMonitorGPhoto2)
Mount(0): iPhone -> gphoto2://Apple_Inc._iPhone_3575bbd12605efd9f1f97521683d82f34e9ac141/
Type: GProxyShadowMount (GProxyVolumeMonitorGPhoto2)
Volume(2): Documents on iPhone
Type: GProxyVolume (GProxyVolumeMonitorAfc)
Mount(0): Documents on iPhone -> afc://3575bbd12605efd9f1f97521683d82f34e9ac141:3/
Type: GProxyShadowMount (GProxyVolumeMonitorAfc)
Mount(2): iPhone -> gphoto2://Apple_Inc._iPhone_3575bbd12605efd9f1f97521683d82f34e9ac141/
Type: GDaemonMount
Mount(3): Documents on iPhone -> afc://3575bbd12605efd9f1f97521683d82f34e9ac141:3/
Type: GDaemonMount
请注意,前面gio
不需要。使用将导致设备列表截然不同。sudo
sudo
通过这个,我们可以看到有两个坐骑:
- 文件:
afc://3575bbd12605efd9f1f97521683d82f34e9ac141:3/
- 相片:
gphoto2://Apple_Inc._iPhone_3575bbd12605efd9f1f97521683d82f34e9ac141/
有了这些信息,我们可以通过登录时运行的 shell 脚本手动卸载设备。
创建一个包含以下内容的文件:
#!/bin/bash
gio mount -ue "afc://3575bbd12605efd9f1f97521683d82f34e9ac141:3/"
gio mount -ue "gphoto2://Apple_Inc._iPhone_3575bbd12605efd9f1f97521683d82f34e9ac141/"
确保使用从 收到的值替换挂载点gio mount --list
。
此脚本将卸载两个位置。-u
表示“卸载”,-e
表示“弹出”。 我们可以将它们组合为-ue
。
该脚本可以通过执行来执行,cmmod +x {name of file}
并且可以在您登录时将其添加到systemd
运行,甚至可以在插入 USB 设备时运行。
当 iPhone 插入电源时运行脚本:
首先,我们需要知道手机的制造商 ID 和设备 ID。我们可以使用 来执行此操作lsusb
,它将返回如下内容:
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 138a:0097 Validity Sensors, Inc.
Bus 001 Device 004: ID 04f2:b5ce Chicony Electronics Co., Ltd Integrated Camera
Bus 001 Device 002: ID 04f2:b5cf Chicony Electronics Co., Ltd Integrated IR Camera
Bus 001 Device 018: ID 05ac:12a8 Apple, Inc. iPhone5/5C/5S/6
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
我的 iPhone 6s 似乎注册为 6,但没关系。Apple 的制造商 ID 是
05ac
,手机的 ID 是12a8
。我们可以据此制定udev
规则。
创建一个名为的文件,例如99-unmount-iphone.rules
,/etc/udev/rules.d/
并添加以下行,将一些 ID 更改为您从 收到的值lsusb
:
ACTION=="add", ATTRS{idVendor}=="{Apple's ID}", ATTRS{idProduct}=="{Phone's ID}", RUN+="/home/{your user}/unmount-iphone.sh"
该unmount-iphone.sh
文件是您之前制作的卸载并弹出手机存储设备的文件。请务必将位置更改为文件实际存在的位置。
完成后,udev
像这样重新加载:
sudo udevadm control --reload-rules
现在,当你插入手机时,自动卸载手机的 shell 脚本将被调用。
但是……这并非 100% 万无一失。如前所述,Gnome 似乎一直在尝试安装手机的存储设备。就我而言,我可以看到设备被弹出,但只要手机连接到计算机,它们仍会出现在 Nautilus 中:
据我所知,如果您同时运行所有这些方法,则不会出现任何问题。我的联想 Carbon 今天和以往一样稳定。手机确实可以继续正常共享其网络连接,因为该功能是通过单独的进程控制的。
因此,虽然这不是对您的问题的 100% 万无一失的答案,但它可能在很大程度上帮助您实现将手机存储设备与计算机隔离开来以减少摩擦的目标。
答案2
对于预期操作,您可以选择的选项(请参阅下面的详细信息):
udisks
/etc/fstab
和noauto
udisks
方法(来源)。1.1. 插入 iPhone 并使用 查找您的设备 ID
lsusb
,例如。0458:0186
。1.2. 找到分区名称,例如
/dev/sdb1
。您有几个选项...df
,lsblk
(或者,更好的是lsblik -e7
),sudo fdisk -l
,ETC。。1.3. 创建一个脚本,say
iphone-nonmount.sh
in/lib/udev
(需要sudo
访问权限),内容如下#!/bin/bash udisks --unmount /dev/sdb1 udisks --detach /dev/sdb
并使其可执行:
sudo chmod +x /lib/udev/unmount.sh
1.4. 在
/etc/udev/rules.d/
(需要sudo
访问权限) 中创建一个新规则文件,例如,/etc/udev/rules.d/100-unmount-iphone.rules
包含以下内容ACTION=="add", ATTRS{idVendor}=="0458", ATTRS{idProduct}=="0186", RUN+="/lib/udev/iphone-nonmount.sh
1.5.
udev
使用以下命令重新加载规则而无需重新启动sudo udevadm control --reload-rules
/etc/fstab
withnoauto
方法
Matigo 的帖子有变种,请参见这. 可以使用 获取 UUID sudo blkid
,例如这。插入并安装 iPhone 后,可以更轻松地使用gnome-disks
,选择分区,然后单击齿轮图标附加分区选项->编辑挂载选项