我想知道gnome-disk
正在做什么,如何在命令行上执行相同的操作以及如何撤消gnome-disk
所做的一切。 (它无法撤消它自己所做的一切。)
我已经做了一些实验,发现了以下情况:我玩的 USB 闪存拇指驱动器(“棒”)至少有 3 个“状态级别”可以切换,其中 2 个可以使用gnome-drive
“弹出”按钮进行切换(开和关)和“断电”(仅关)。
从最高层到最低层,我发现:
- 喷射
gnome-drive
的弹出按钮- 驱动器不会消失,无论是从 gnome-drive 还是其他地方
- 命令行:
eject /dev/sdb
- 无法撤消
gnome-drive
- 撤消:
eject --trayclose /dev/sdb
- 内核消息 (
journalctl -k
)- 喷射
sdb: detected capacity change from 30253056 to 0
- 取消弹出
sd 4:0:0:0: [sdb] 30253056 512-byte logical blocks: (15.5 GB/14.4 GiB)
sdb: detected capacity change from 0 to 30253056
sdb: [partition details of my drive]
- 喷射
- (解除)绑定
- 没有找到等效项
gnome-drive
- 命令行:
echo 3-6 > /sys/bus/usb/drivers/usb/unbind
gnome-drive
设备完全消失- 没有内核消息
lsusb -t
仍然可以看到该设备,但不再显示类(“大容量存储”)或驱动程序(“usb-storage”)/sys/bus/usb/drivers/usb/3-6
目录消失了- 撤消与
echo 3-6 > /sys/bus/usb/drivers/usb/bind
- 这会引发内核消息
usb-storage 3-6:1.0: USB Mass Storage device detected
scsi host4: usb-storage 3-6:1.0
scsi 4:0:0:0: Direct-Access TOSHIBA TransMemory PMAP PQ: 0 ANSI: 6
sd 4:0:0:0: Attached scsi generic sg2 type 0
sd 4:0:0:0: [sdb] 30253056 512-byte logical blocks: (15.5 GB/14.4 GiB)
sd 4:0:0:0: [sdb] Write Protect is off
sd 4:0:0:0: [sdb] Mode Sense: 45 00 00 00
sd 4:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
sdb: [partition details of my drive...]
sd 4:0:0:0: [sdb] Attached SCSI removable disk
- 这会引发内核消息
- 没有找到等效项
- 关闭电源
gnome-drive
的电源关闭按钮- 设备在所有东西上消失,就像物理拔掉插头一样
- 与真正的拔掉插头没有区别
- 内核消息:
usb 3-6: USB disconnect, device number 10
- 如何通过命令行关闭电源?
- 如何在不重新插入电源的情况下重新开机?
为了完整起见:重新插入棒会分配新的设备编号(11),总线和端口保持不变(3-6),并且显示这些内核消息:
usb 3-6: new high-speed USB device number 11 using xhci_hcd
usb 3-6: New USB device found, idVendor=0930, idProduct=6545, bcdDevi>
usb 3-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 3-6: Product: TransMemory
usb 3-6: Manufacturer: TOSHIBA
usb 3-6: SerialNumber: C03FD5F7713EE2B1B000821E
[plus all kernel messages as quoted under (re-)bind above]
答案1
多年来一直有人提出类似的问题(与您标题中的问题相同),例如[1],[2],[3](如果您花时间搜索,可能有十多个...)由于代码的更改,现在大多数答案不再有效...
无论如何,我已经好几年没有使用过GNOME
,但要专注于您的第一个问题邮政:
我想知道
gnome-disk
正在做什么,如何在命令行上执行相同的操作
最简单的方法是查看例如的源gnome-disk
代码gduwindow.c
使用两个函数:udisks_drive_call_eject ()
和udisks_drive_call_power_off ()
-记录在这里它说他们调用Eject()
和 分别是PowerOff()
D-Bus 方法,这意味着您可以通过d-bus
调用在 cli 上调用这些方法。
示例:闪存驱动器ADATA
被标识为sda
但未安装
sda 8:0 1 14,9G 0 disk
├─sda1 8:1 1 14,6G 0 part
首先,获取对应的驱动器ID sda
:
busctl get-property org.freedesktop.UDisks2 /org/freedesktop/UDisks2/block_devices/sda org.freedesktop.UDisks2.Block Drive
这将打印类似
o "/org/freedesktop/UDisks2/drives/ADATA"
d-bus
然后,您可以使用引号中的部分作为调用弹出或关闭驱动器电源的对象:
busctl call org.freedesktop.UDisks2 /org/freedesktop/UDisks2/drives/ADATA org.freedesktop.UDisks2.Drive Eject 'a{sv}' 0
busctl call org.freedesktop.UDisks2 /org/freedesktop/UDisks2/drives/ADATA org.freedesktop.UDisks2.Drive PowerOff 'a{sv}' 0
与gdbus
具体相同GNOME
:
gdbus call --system --dest org.freedesktop.UDisks2 --object-path /org/freedesktop/UDisks2/drives/ADATA --method org.freedesktop.UDisks2.Drive.Eject {}
gdbus call --system --dest org.freedesktop.UDisks2 --object-path /org/freedesktop/UDisks2/drives/ADATA --method org.freedesktop.UDisks2.Drive.PowerOff {}
请注意,如果安装了文件系统(驱动器正在使用),这些命令将出错。另外,正如您在文档中看到的,没有un-eject
orun-power-off
方法,这就是为什么gnome-disk
无法撤消任何这些操作的原因。
我不确定为什么有人会使用上面的命令(我不太明白eject()
在闪存驱动器的上下文中的意义,但这是另一个讨论)...
我(像许多其他人一样)卸载文件系统
udisksctl unmount -b /dev/sda1
进而关闭驱动器电源和
udisksctl power-off -b /dev/sda
为了重新连接已关闭电源的驱动器,您必须运行某种 USB 端口重置/重新扫描/重新配置(普通用户无法完成)。其他帖子中的解决方案都不适合我使用内核 6.6.2,所以我现在无法提出任何建议......
答案2
如何在命令行下关闭电源?
echo 1 > /sys/bus/usb/devices/3-2.1/port/disable
端口是bus_nr-port.by.port.hub.chain.seperated.with.dots
,即3-3
或3-2.4.6
。在这两个示例中,端口位于总线 3 上。第一个示例只是端口 3,第二个示例是两个集线器链,其中第一个集线器位于总线 3 的端口 2 中,第二个集线器位于第一个集线器的端口 4 中。该设备位于第二个集线器的端口 6 上。
如何在不重新插入电源的情况下重新开机?
echo 0 > '/sys/devices/pci0000:00/0000:00:14.0/usb3/3-0:1.0/usb3-port3/disable'
或者因为3-2.1
它可能是
echo 0 > '/sys/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0/3-2-port1/disable'
当端口启用时,您可以pwd -P
在该文件所在的目录中disable
预先查看相应集线器的端口管理界面的真实位置。对于建立 USB 总线的主机控制器列表来说,ls -l /sys/bus/usb/devices/usb*
是一个好的开始。
答案3
如何在命令行下关闭电源?
更新:我终于发现了——请参阅我的其他答案。
如何在不重新插入电源的情况下重新开机?
一个粗暴的方法(它暂时杀死了我的鼠标和键盘,所以确保你可以启动这两个命令......)是重新绑定 USB 主机 PCI 设备。这似乎会像启动或物理重新插入一样重新启动所有端口。至少对于我来说:
echo 0000:00:14.0 > /sys/bus/pci/drivers/xhci_hcd/unbind
echo 0000:00:14.0 > /sys/bus/pci/drivers/xhci_hcd/bind
当然,该数字需要根据您的环境进行调整。看看你有什么:
lspci -t
透露那xhci_hcd
USB总线由和驱动
ls -la /sys/bus/pci/drivers/xhci_hcd/ | grep ^l
仅显示0000:00:14.0
为设备。