[devel] Bring the boys back^W^W^W^WВерните мне моё флэшко!

Alexey Morozov morozov_ml на ngs.ru
Чт Ноя 22 09:54:21 MSK 2012


Здравствуйте!

Несмотря на то, что будущее уже почти наступило, космические корабли
вот-вот забороздят, а systemd вот-вот заколоси^W заработает, как
Леннарту мечталось в самых сладких его снах, остались ещё некоторые
проблемы в отдельных областях социалистического хозяйства.

Проблема, которая меня выбешивает^W беспокоит вот уже на протяжении
длительного времени - это работоспособность всей чудесной, чудесной
связки ConsoleKit + PolicyKit (который в народе нынче любовно клычуть
полкIтом) + udisks обеих версий + KDE.

Вкратце, проблема эта с udisks-1.x, которым до 4.8.x пользовался Solid в
KDE, выглядит так:

alex на rhyme ~ $ udisks --mount
/dev/sdc                                       
Mount failed: Not Authorized
alex на rhyme ~ $ _

При этом, волшебные советы не ходить нищеб^W^W^W завести себе консольную
сессию не работают, т.к. она уже есть:

alex на rhyme ~ $
ck-list-sessions                                                        
Session2:
        unix-user = '500'
        realname = 'Алексей Морозов'
        seat = 'Seat1'
        session-type = ''
        active = TRUE
        x11-display = ':0'
        x11-display-device = '/dev/tty7'
        display-device = ''
        remote-host-name = ''
        is-local = TRUE
        on-since = '2012-11-22T03:14:52.061085Z'
        login-session-id = '4294967295'
alex на rhyme ~ $ _

Насколько я успел увидеть, я не первый среди пользователей ALT'а,
который побегал по этим граблям

http://lists.altlinux.org/pipermail/sisyphus/2012-May/357588.html

Приятно стоять на плечах гигантов, чо.

По счастью, для udisks-1.x есть специальная чудодейственная мазь,
почерпнутая с http://unixforum.org/index.php?showtopic=132351 :

------------- 8< ---
/etc/polkit-1/localauthority/50-local.d/10-users-mount.pkla --- >8
---------------------
[Storage Permissions]
Identity=unix-group:users
Action=org.freedesktop.udisks.filesystem-mount;org.freedesktop.udisks.filesystem-unmount-others;org.freedesktop.udisks.drive-eject;org.freedesktop.udisks.drive-detach;org.freedesktop.udisks.luks-unlock;org.freedesktop.udisks.inhibit-polling;org.freedesktop.udisks.drive-set-spindown
ResultAny=yes
ResultActive=yes
ResultInactive=yes
--------------8<
---------------------------------------------------------------------------------------
>8 -----------------------

Ну, то есть, решение то ещё (спрашивается, нафейхоа было городить весь
этот огород с тремя демонами и пятью интерфейсами, если всё в итоге
свелось к обычным unix groups), но да ладно. Типа, издержки
поступательного движения ко всеобщему счастью.

И всё было хорошо, пока я не проапгрейдился до KDE-4.9.x. В нём
какой-то, м-м-м, прогрессор придумал, что теперь "все знатные татары в
Париже"(1) должны использовать udisks-2. В (альтовских) настройках
которого, о чудо! стоит обязательная аутентификация при монтировании диска:

alex на rhyme ~ $ udisksctl mount -b /dev/sdc            
==== AUTHENTICATING FOR org.freedesktop.udisks2.filesystem-mount ===
Authentication is required to mount USB2.0 Flash Disk (/dev/sdc)
Authenticating as: Алексей Морозов (alex)
Password:
==== AUTHENTICATION COMPLETE ===
Mounted /dev/sdc at /run/media/alex/001B-9622.
alex на rhyme ~ $ _

Не, оно мне, конечно, приятно... Лишний раз увидеть на экране монитора
своё имя, да и меньше шансов забыть пароль из-за надвигающегося склероза.

Но есть одно но. KDE (as of 4.9.3) к такому вероломству и патологической
недоверчивости, видимо, не готов, и обламывается монтировать флэшки на
таких дискриминационных, по его мнению, условиях. В логах почти-что
пусто, только в .xsession-errors появляется довольно невнятное:

got invalid reply for cache: "Name"
got invalid reply for cache: "DeviceNumber"
got invalid reply for cache: "Device"
file:///usr/share/kde4/apps/plasma/plasmoids/notifier/contents/ui/DeviceItem.qml:66:
TypeError: Result of expression 'notifierDialog.highlightItem' [null] is
not an object.

dbus-monitor кажет следующее на _сессионной_ шине:

signal sender=:1.15 -> dest=(null destination) serial=1731
path=/org/kde/solid/Device__2Forg_2Ffreedesktop_2FUDisks2_2Fblock_5Fdevices_2Fsdc;
interface=org.kde.Solid.Device; member=setupRequested
signal sender=:1.15 -> dest=(null destination) serial=1732
path=/org/kde/solid/Device__2Forg_2Ffreedesktop_2FUDisks2_2Fblock_5Fdevices_2Fsdc;
interface=org.kde.Solid.Device; member=setupDone
   int32 1
   string "An unspecified error has occurred: Not authorized to perform
operation"

Как поймать сообщения летающие между solid'ом и
/usr/libexec/udisks2/udisksd я пока не придумал, на системной шине их не
видно.

Я, в принципе, уже нашёл такое:

https://wiki.archlinux.org/index.php/PolicyKit#Workaround_to_mount_filesytems_by_user_in_group_storage_without_password

но чо-та мне пока стрёмно конфигурировать свою систему при помощи
джаваскриптов, да и не работает этот рецепт у нас искаропки.

В общем, таперича для монтирования флэшек моей жене требуется монтировка
и такая-то матерь^W^W^W^W помощь мужа. Начинаешь чувствовать себя
немножко фрибздишнегом.

С уважением,
АМ

(1) - https://www.youtube.com/watch?v=Ebqk1c397Rs



Подробная информация о списке рассылки Devel