Как смонтировать устройство, доступное только для чтения, с помощью Python3 и Udisks2?

#python-3.x #glib #udisks

#python-3.x #glib #udisks

Вопрос:

Мне нужно (временно) смонтировать устройство только для чтения с помощью Python3 и Udisks2 API. Каков правильный GLib.Variant для этого?

Я создал приведенный ниже скрипт для тестирования с помощью USB-накопителя. В качестве этого устройства предполагается /dev/sdc1.

 #! /usr/bin/env python3

MYDEVICE = '/dev/sdc1'

import gi
gi.require_version('UDisks', '2.0')
from gi.repository import UDisks, GLib

read_only = GLib.Variant('a{sv}', {'read-only': GLib.Variant('b', True)})

client = UDisks.Client.new_sync(None)
manager = client.get_object_manager()
for obj in manager.get_objects():
    block = obj.get_block()
    if not block: continue
    device_path = block.get_cached_property("Device").get_bytestring().decode('utf-8')
    if device_path == MYDEVICE:
        fs = obj.get_filesystem()
        mount_points = fs.call_mount_sync(read_only, None)
        print((mount_points))
  

Это смонтирует устройство, но оно не будет смонтировано только для чтения.

Я бы ожидал, что он смонтирует устройство как доступное только для чтения или, по крайней мере, выдаст ошибку, если параметр «только для чтения» недействителен.

Комментарии:

1. Попробуйте GLib.Variant('a{sv}', {'options': GLib.Variant('s', 'ro')}) .

2. Вот и все! Я искал документацию о том, как использовать Glib.Variant в отношении Udisks2, но так ничего и не нашел. Зная теперь, как использовать опции таким образом, вы можете использовать любую другую доступную опцию. Спасибо!

3. Круто, спасибо за тестирование. Я написал это как правильный ответ.

Ответ №1:

Используется GLib.Variant('a{sv}', {'options': GLib.Variant('s', 'ro')}) для передачи стандартной ro опции через mount .

Смотрите Mount() Документацию по интерфейсу D-Bus udisks.