В системе существует пара учетных записей пользователей, которые так или иначе эквивалентны.
Более конкретно, для данной пары:
dm-tool switch-to-user
но практически пользователь затем должен повторно пройти проверку подлинности на каждом переключателе, и это - потеря производительности.Потребность состоит в том, чтобы позволить быстрый переключатель между двумя, графическими X сессий (например, при щелчке по кнопке на панели), не имея необходимость повторно проходить проверку подлинности.
Я знаю, что расслабляющая безопасность между парой пользователей при сохранении других операций безопасными более сложна, чем обычный подход блокировки-и-переключателя. К счастью, в нашем случае это хорошо, если некоторая локальная защита потеряна, так как машина находится в управляемом помещении. Например, если бы решение потребности вызывает некоторый сценарий, который обычно автоматически блокировал бы сессию (как suspend+resume), чтобы больше не заблокировать для этой пары пользователей или даже каждого пользователя в системе, это может быть приемлемо.
Однако, хорошо, если пользователь может вручную заблокировать сессию.
Кроме того, удаленная безопасность должна быть сохранена (например, доступ SSH к тем учетным записям не должен быть затронут решением этой проблемы).
В основном использовать dm-tool switch-to-user *username*
и примите меры, чтобы сессия пользователя не была заблокирована.
В Ubuntu 12.04 мы отключили легкий блокировщик для предотвращения блокировки сессии плюс набор значок на рабочем столе каждого пользователя, который выполнил эту команду:
dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.DisplayManager $XDG_SEAT_PATH org.freedesktop.DisplayManager.Seat.SwitchToUser string:$CALLEDUSERNAME string:somesessionname
Это работало: сессия, переключенная на пользователя, упомянула как $CALLEDUSERNAME
.
Это неудовлетворительно на 16,04: это переключается на зазывалу с $CALLEDUSERNAME
предварительно выбранный, но аутентификация все еще необходим. Так, в основном результат совпадает с dm-tool switch-to-user *username*
. Я не проверил полностью, но вероятно это просто идет точно те же пути выполнения кода как какой dm-tool
причины.
Разыскиваемый подсказки в Ошибке № 1205384 “Блокировка могут обойтись путем переключения на консоль”: Ошибки: пакет lxsession: Ubuntu, ничто конкретно работа.
Я посмотрел на dm-tool
исходный код по http://archive.ubuntu.com/ubuntu/pool/main/l/lightdm/lightdm_1.18.1-0ubuntu1.tar.gz (из ссылки на Ubuntu – Детали пакета lightdm в гостеприимном).
Принцип похож на это:
dm-tool
исполняемый файл называет dbus для отправки сообщения в lightdm
.lightdm
получает dbus событие в handle_seat_call()
, вызовы seat_switch_to_user()
seat_switch_to_user()
вызовы g_signal_connect (session, SESSION_SIGNAL_AUTHENTICATION_COMPLETE, G_CALLBACK (switch_authentication_complete_cb), seat);
зарегистрировать обратный вызов switch_authentication_complete_cb()
.seat_switch_to_user()
затем вызовы session_start()
который, по-видимому, создает совершенно новый X сессий для получения аутентификации (не уверенный в деталях, возможно, выполнения session_child_run()
который называет PAM),switch_authentication_complete_cb()
затем переключатели к существующей сессии или создают новуюМы можем так или иначе дать PAM команду просто позволять, не запрашивая в этом случае, но без того изменения, нарушающего никакой другой случай? Идеально поведение PAM изменилось бы только в случае пользователя переключателя, не в случае входа в систему или разблокировать случае. Возможно, дополнительное X сессий было бы все еще запущено, но не ожидающий пользователя для ввода пароля.
Xorg
командная строка, которая говорит соответствующее vt число и пишет результат в стандартное место).При необходимости переключиться на пользователя, получите vt число и использование chvt
. Вероятно, некоторая конфигурация sudo будет необходима.
Преимущество: более простой, никакая путаница с lightdm
, PAM или что бы то ни было, даже явная зависимость от lightdm
так мог бы работать в другом месте.
dm-tool
, PAM корректируется)?chvt
)?Спасибо за внимание.
Я записал патч usable-proof-of-concept к lightdm
это делает задание.
Это делает то, в чем мы нуждаемся здесь!
Посмотрите ниже для инструкций по установке.
lightdm
, включая использование light-locker
для блокировки сессии. Единица и XFCE должны работать.Протестированный с XFCE.
Попробуйте это прежде, чем выполнить изменения:
Теперь от любой двух сессий можно сделать:
dm-tool switch-to-user userA
или
dm-tool switch-to-user userB
Без изменения Вы будете видеть, что приглашение ко входу в систему требует для ввода пароля.
С изменением Вы будете видеть непосредственный переключатель без приглашения ко входу в систему.
Здесь переключатель действительно быстр. Намного более быстрый, чем в Ubuntu 12.04 и даже не мерцая в некоторых случаях.
Для максимального преимущества я рекомендую создать значок средства запуска где-нибудь в прикреплении/панели/причале (независимо от того, что это называют в Вашей конкретной настольной среде), что, когда нажатые выполнения:
dm-tool switch-to-user name-of-other-user
Применение команд ниже заменяет систему lightdm
пакеты с измененными версиями, которые позволяют переключаться между любыми двумя пользователями, в настоящее время зарегистрированными графическая сессия. Это ослабляет безопасность системы, например, пользователь, журналы в графически, сессия блокировок, уходят, пользователь B входит в систему. Пользователь B может разблокировать пользователя сессия и переключить на нее любое время, она открыта. И наоборот (подкачивают A и B).
Изменения не могут быть применены без доступа администратора (sudo
принят, специально для установки пакета).
Это хорошо работает для нас, но тем не менее, отметьте это lightdm
важный пакет, и это могло бы повредить его или представить другие тонкие ошибки. Повреждение его повредит способность использовать графические сессии входа в систему для всех пользователей. Вы полностью ответственны за использование команд ниже. Вас предупредили.
Изменения являются почти постоянными. Они остаются после перезагрузки. Вернуться их, установка (использование aptitude
, synaptic
или безотносительно) постоянный клиент lightdm*
пакеты, которые заменят измененные.
Заметьте, что любое время Ubuntu обновляет lightdm
пакеты и обновления установлены, они вернутся изменения. Администратор может применить их снова.
Это подтверждение концепции могло быть усовершенствовано умным использованием, например, группами Unix. lightdm
только позволил бы переключатель, если текущие и целевые пользователи перечислены в какой-либо группе со стандартным именем файла, как lightdm-quickswitch-anystringfoo
. Такое изменение (возможный вместе с другими) могло быть в конечном счете объединено в некоторое официальное решение.
Я предлагаю войти в систему на текстовой консоли (нажмите Ctrl-Alt-F1 и вход в систему) сделать шаги ниже. Это позволяет перезапускать lightdm, не теряя текущую оболочку.
Вставка копии команды ниже в оболочке удара и это будет корректироваться lightdm
выполнить изменения.
(
set -euxv
echo Making sure system has necessary packages.
echo Installing packages will be done only once but might be long as it may fetch around 40Mbytes of data from the Internet.
sudo apt-get --assume-yes install devscripts
echo Enabling source packages in apt.
sudo sed -i '/^#\sdeb-src /s/^# *//' "/etc/apt/sources.list"
sudo apt-get update
sudo apt-get --assume-yes --no-install-recommends build-dep lightdm
THETEMPDIR=$( mktemp -d )
cd $THETEMPDIR
echo Getting package source
apt-get source lightdm
cd */
pwd
if [ -d .pc ]
then
quilt push -a || echo "Quilt returned an error code, we ignore it because we saw it was sometimes irrelevant."
quilt new allow_switch_between_logged_users_without_authentication
quilt add src/seat.c
fi
patch -p0 <<EOF
--- src/seat.c 2016-07-29 05:19:45.000000000 +0200
+++ src/seat.c 2016-08-15 19:37:11.693364683 +0200
@@ -1578,6 +1578,20 @@
l_debug (seat, "Switching to user %s", username);
+ if (session)
+ {
+ l_debug (seat, "WIP quick switch: found inactive existing user session, switching to it: %s. For details, see https://askubuntu.com/questions/811953/switching-between-two-opened-x-sessions-without-reauthenticating", username);
+
+ session_unlock (session);
+ seat_set_active_session (seat, session);
+
+ l_debug (seat, "WIP quick switch to user complete: %s. For details, see https://askubuntu.com/questions/811953/switching-between-two-opened-x-sessions-without-reauthenticating", username);
+ return TRUE;
+ }
+
+ l_debug (seat, "WIP quick switch: no session for user, switching to greeter: %s. For details, see https://askubuntu.com/questions/811953/switching-between-two-opened-x-sessions-without-reauthenticating", username);
+
+
/* Attempt to authenticate them */
session = create_user_session (seat, username, FALSE);
g_signal_connect (session, SESSION_SIGNAL_AUTHENTICATION_COMPLETE, G_CALLBACK (switch_authentication_complete_cb), seat);
EOF
if [ -d .pc ]
then
quilt refresh
ls -al debian/patches/allow_switch_between_logged_users_without_authentication
cat debian/patches/allow_switch_between_logged_users_without_authentication
fi
echo Building modified packages.
dch -lquickswitch "Allow dm-tool switch-to-user username to switch without authentication if user session is already opened. WARNING: this negates local security. For details, see https://askubuntu.com/questions/811953/switching-between-two-opened-x-sessions-without-reauthenticating"
head debian/changelog
time dpkg-buildpackage -rfakeroot -uc -b
echo Installing modified packages.
cd ..
PACKAGESTOINSTALL=$( for DEBNAME in *.deb ; do PACKAGENAME="$( echo "$DEBNAME" | cut -f 1 -d _ )" ; if dpkg -l $PACKAGENAME | grep -q ^ii ; then echo $DEBNAME ; fi ; done ) ; sudo dpkg --install ${PACKAGESTOINSTALL}
dpkg -l '*lightdm*'
)
Заметьте, что команда ниже сразу закроет все графические сеансы без шанса сохранить данные, таким образом, все пользователи должны будут закрыть приложения правильно и сохранить необходимые данные сначала.
Если пакеты действительно устанавливали хорошо, с изменением можно сразу активировать:
sudo service lightdm restart
или путем перезагрузки.
Это работает на Вас? Можно ли думать о варианте? Приветствие обратной связи.