[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