Hatred's Log Place

DON'T PANIC!

Jan 23, 2013 - 2 minute read -

ArchLinux, systemd, run-level 3, startx, udisks и монтирование

Столкнулся с ситуацией: после перехода к systemd и его logind внезапно отказались монтироваться флешки средствами udisks и udisks2. При этом на соседнем компьютере всё нормально. Разница при этом между ними только одна: на одном иксы запускаются через kdm, на другом - startx. Вот там, где используется startx монтирование и не работает.

В ходе разбора наткнулся на эпичный тред, где поттеринг пытается убедить, что нужно апдейтить startx: https://bugzilla.redhat.com/show_bug.cgi?id=820675

Но оставим этого человека альтернативной ориентации и вернёмся к нашим баранам. А бараны такие: заставить без костылей или минимум оных монтировать накопители средствами udisks/udisks2 на машине, где используется startx.

Для начала выясняем, а в чём собственно соль проблемы. Выясняется, что когда мы запускаем иксы, они захватывают отдельный терминал и переключают пользователя на него, тем самым мы как бы переключаемся из сессии, созданной при логине в консоли, и она становится неактивной. Новой сессии для иксов при этом не создаётся. В результате этого в выводе команды loginctl show-session $XDG_SESSION_ID

видим такие строчки: Active=no

При этом, изучая конфиги polkit, мы можем увидеть, что мы можем регулировать права доступа для монтирования для активной сессии, неактивной и для остальных. Отсюда вытекает первый вариант исправления ошибки (и первый костыльный): править конфиги polkit и разрешать доступы с неактивных сессий для операций монтирования.

Проблема метода очевидна: ближайшее обновление и нам нужно мержить, или менять снова. Не гут.

Второй метод, запустить иксы на том же терминале, на котором мы залогинились. К примеру, мы зашли с первой консоли, команда tty выдаёт следующее: /dev/tty1

тогда, что бы запустить иксы на этой консоли нам нужно выполнить следующую команду: startx – vt1

И видим, что в выводе loginctl Active стал yes. Viva!

В таком варианте есть свой плюс: если заблокировать экран, допустим, с помощью xscreensaver, то мы не сможем переключиться на первую текстовую консоль и, нажав Ctrl-C, убить иксы и получить доступ к залогиненому аккаунту. Здесь же кроется и минус: подвисшую сессию оперативно не убьёшь, особенно, если она отказывается реагировать на Ctrl-Alt-BS. Плюс как-то не классически.

Как последний штрих, добавляем в ~/.bashrc следующее:

stx()
{
	local vt=$(fgconsole)
	startx -- vt$vt
}
alias startx='stx'

и продолжать пользоваться просто командой startx.

Здесь же кроется забавный баг: теперь, если случайно нажать startx в окне терминала в запущенных иксах, поверх них запустится их вторая копия и переключиться между ними не получится ни при каких обстоятельствах. Так что будьте осторожны и бдительны.

Как заключение: подобные изменения лишний раз подтверждают правило: работает - не трожь! Особенно если это касается системообразующих функций, систем загрузки и пр.

Материалы которые помогли мне разобраться:

Tags: archlinux startx systemd udisks

AsciiDoc и PlantUML OpenCV Cheat Sheet (C++)

comments powered by Disqus