Как ограничить пользователя определенной средой рабочего стола?
У меня более или менее стандартная установка Ubuntu Precise 12.04, и я вполне доволен выполнением повседневных задач в среде рабочего стола Unity.
Однако когда дело доходит до игры, я чувствую себя намного более комфортно с LXDE (фон: в текущем состоянии Unity архивирует гораздо более низкие частоты кадров, чем, например, Unity 2D или LXDE - это известная ошибка, над которой мы работаем).
Для этого я создал профиль пользователя геймера и теперь хочу ограничить его использованием только рабочей среды LXDE.
Чтобы уточнить это далее: когда меня просят войти в систему после загрузки, я хочу, чтобы только LXDE отображался в качестве опции для профиля пользователя геймера на экране входа в систему, в то время как в моем стандартном профиле пользователя все еще должна быть возможность выбрать, какую среду рабочего стола использовать.
Заранее благодарим за понимание, которое может помочь!
2 ответа
Хорошо, из моего понимания LightDM (менеджера входа в систему), кажется, не поддерживается ограничение рабочих столов для конкретного пользователя. Это сделка "все или ничего". По умолчанию, когда пользователь выбирает среду рабочего стола, это становится его средой рабочего стола по умолчанию. Когда они войдут в следующий раз, если они не выберут другой, они войдут в систему по умолчанию.
Однако вы можете сделать так, чтобы пользователь не мог изменить это. Этот пользователь по-прежнему сможет выбирать другую среду рабочего стола, но если он это сделает, он не изменит их по умолчанию. Я считаю, что это самый безопасный способ сделать это, если вы не беспокоитесь, что человек это изменит. Все, что вам нужно сделать, это отредактировать их .dmrc файл (находится в их домашнем каталоге, т.е. /home/user). Здесь хранится их сессия по умолчанию. Изменить Session переменная в этом файле, что вы хотите, т.е. ubuntu по умолчанию Unity DE, ubuntu-2d это Unity 2D, и LXDE это LXDE. Чтобы это не изменилось, если они войдут в систему с другим DE, мы можем просто сделать его неизменным (неизменяемым):
sudo chattr +i /home/user/.dmrc
Теперь никто не сможет изменить этот файл (включая root и другие программы), если вы не уберете флаг immutable:
sudo chattr -i /home/user/.dmrc
Если вы абсолютно НЕ хотите, чтобы этот пользователь когда-либо входил в систему с другим DE, я нашел действительно хакерский способ (т.е. сделал это на свой страх и риск) для достижения этой цели. Мне было немного скучно, и это казалось забавной попыткой. Все различные DE, которые видит LightDM, хранятся в /usr/share/xsessions как .desktop файлы. К вашему сведению, вы можете удалить любой из них, который вы не хотите показывать на экране входа в систему (но это удалит его для ВСЕХ пользователей). Если вы откроете любой из них, они довольно просты. Это основные файлы запуска на рабочем столе, как и все ярлыки на рабочем столе. Каждый содержит Exec строка, которая исполняется, когда вы выбираете свою DE на экране входа в систему (т.е. какая DE запускается). Мы собираемся воспользоваться этим и проверить, какой пользователь входит в систему. Если пользователь является нашим ограниченным пользователем, мы заставим его использовать определенную DE.
Во-первых, для каждого .desktop файл в /usr/share/xsessions/ вам нужно будет создать скрипт в /usr/local/bin, Для моего примера я покажу, как это сделать для ubuntu.desktop, который является Unity DE, и, используя LXDE в качестве DE, мы вынуждены использовать нашего пользователя с ограниченными правами. Глядя на LXDE.desktop, мы видим, что Exec команда /usr/bin/startlxde и нет TryExec команда. Когда вы открываете ubuntu.desktop мы видим, что Exec команда gnome-session --session=ubuntu и TryExec команда unity, TryExec Команда это только то, как это звучит. После запуска Exec команда попытается запустить TryExec команда, но если это не удастся, он не потерпит крах.
Теперь, принимая те команды, которые мы получили от .desktop файлы, которые мы можем создавать наши скрипты. Мы поместим их в /usr/share/bin, Нам нужно будет сделать два, один для Exec и один для TryExec, Мы сделаем что-то вроде этого:
ubuntude.sh
#!/bin/bash
if [ `/usr/bin/whoami` = "restricteduser" ] ; then
/usr/bin/startlxde
else
gnome-session --session=ubuntu
fi
ubuntudetry.sh
#!/bin/bash
if [ `/usr/bin/whoami` != "restricteduser" ] ; then
unity
fi
Мы просто проверяем, является ли входящий в систему пользователь с ограниченными правами, и запускаем соответствующий DE. Теперь нам нужно убедиться, что они исполняемые:
sudo chmod +x /usr/local/bin/ubuntude.sh
sudo chmod +x /usr/local/bin/ubuntudetry.sh
Теперь нам нужно изменить наш ubuntu.desktop так что он будет вызывать наши сценарии, а не фактические DE. Закомментируйте Exec а также TryExec строки в файле и замените их следующим:
Exec=/usr/local/bin/ubuntude.sh
TryExec=/usr/local/bin/ubuntudetry.sh
Просто повторите процедуру для любых других DE, которые вы можете иметь. Если нет TryExec для DE тогда нет необходимости создавать сценарий detry.sh для него, так как LXDE не использует TryExec, Очевидно, что это немного странно, и вы должны убедиться, что вы сделали резервные копии любых файлов перед их редактированием, но это сработает, если вам абсолютно необходимо убедиться, что пользователь входит в систему с правильным DE.
В Debian Squeeze и Wheezy вы также можете добавить.xsessionrc одной строкой
экспорт STARTUP = XXX
(где XXX - ваш принудительный сценарий сеанса, см. Exec-Line выше) в домашнем каталоге пользователя для принудительного определения определенного типа сеанса независимо от того, что выбрал пользователь.
Также должен работать на Ubuntu.
(Загляните в /etc/X11/Xsession.d/40x11-common_xsessionrc и 50x11-common_determine-startup, чтобы понять, почему это работает)
Ответ от reverendj1 не работал для меня. Причиной может быть то, что значение, указанное вами в Exec=, не выполняется напрямую, а передается в /etc/X11/Xsession в качестве аргумента. (источник: /questions/372511/kak-ya-mogu-ispolzovat-lightdm-dlya-polzovatelskih-sessij/372513#372513)
Еще одно решение проблемы:
1. Сделайте резервную копию всех файлов / usr / share / xsessions / .desktop
2. Удалите все файлы / usr / share / xsessions /.desktop.
3. Создайте только /usr/share/xsessions/default.desktop с
[Desktop Entry]
Name=Default
Comment=This session is the default session. It will look up the user specific desktop session in ~/.xsession.
Exec=default
"default" - это ключевое слово для Xsession, которое будет искать конкретный сеанс в каталоге пользователя.
4. Теперь создайте для каждого имени пользователя файл /home/ndomusername‹/.xsession. Для приложения, похожего на киоск, это должно выглядеть так:
#!/bin/bash
cd /home/{yourUsername}/ && ./startApplication.py
logout
Например, если другому пользователю разрешено запустить полноценный менеджер рабочего стола, это может выглядеть так:
#!/bin/bash
exec icewm-session
- Убедитесь, что файл ~ /.xsession является исполняемым
sudo chmod +x ~/.xsession
Протестировано на Ubuntu 16.04 с lightdm