Как ограничить пользователя определенной рабочей средой?

8

У меня более или менее стандартная установка Ubuntu Precise 12.04, и я вполне доволен выполнением повседневных задач в среде рабочего стола Unity.

Тем не менее, когда дело доходит до игры, я чувствую себя намного более комфортно с LXDE (фон: в текущем состоянии Unity архивирует гораздо более низкие частоты кадров, чем, например, Unity 2D или LXDE - это известная ошибка, над которой мы работаем).

Для этого я создал профиль пользователя геймера и теперь хочу ограничить его использованием только рабочей среды LXDE.

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

Заранее благодарим за понимание, которое может помочь!

FuzzyQ
источник
Это должно оставить ваш последний выбор по умолчанию на следующий раз. Разве это не делает это? Есть ли причина, по которой вам не нужны другие параметры, если по умолчанию используется правильная среда рабочего стола?
reverendj1
Я тоже заметил это поведение после того, как задал вопрос. По сути, это то, что я хотел и почему спросил. Кроме того, я все еще заинтересован в решении - мне нужно больше узнать о группах и разрешениях ». Я очень удивлен, что это кажется такой огромной проблемой. Это невозможно сделать?
FuzzyQ

Ответы:

4

Хорошо, из моего понимания LightDM (менеджера входа в систему), кажется, не поддерживается ограничение рабочих столов для конкретного пользователя. Это сделка «все или ничего». По умолчанию, когда пользователь выбирает среду рабочего стола, это становится его средой рабочего стола по умолчанию. Когда они войдут в следующий раз, если они не выберут другой, они войдут в систему по умолчанию.

Однако вы можете сделать так, чтобы пользователь не мог изменить это. Этот пользователь по-прежнему сможет выбрать другую среду рабочего стола, но если он это сделает, он не изменит их по умолчанию. Я считаю, что это самый безопасный способ сделать это, если вы не беспокоитесь, что человек это изменит. Все, что вам нужно сделать, это отредактировать их .dmrcфайл (расположенный в их домашнем каталоге, т.е. / home / user). Здесь хранится их сессия по умолчанию. Измените Sessionпеременную в этом файле на любую, какую вы хотите, т.е. ubuntuэто Unity DE по умолчанию, ubuntu-2dUnity 2D и LXDELXDE. Чтобы это не изменилось, если они войдут в систему с другим 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, который мы вынуждаем использовать нашего ограниченного пользователя (limiteduser). Глядя на 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 не использует a TryExec. Очевидно, что это немного странно, и вы должны убедиться, что вы сделали резервные копии любых файлов перед их редактированием, но это сработает, если вам абсолютно необходимо убедиться, что пользователь входит в систему с правильным DE.

reverendj1
источник
1
Прежде всего: спасибо за ваш сложный ответ! Это довольно хитрый подход. Но если я правильно выполнил эту последнюю часть, это заставит пользователя с ограниченными правами войти в lxde независимо от того, какой вариант он выбрал в lightdm . Но все равно будут показаны все остальные параметры, перечисленные в / usr / share / xsessions /, я правильно понял? В этом случае я бы предпочел перейти к варианту 1. Обидно, что нет никакой пользовательской опции для настройки сеансов среды рабочего стола. Удаление ненужных xsessions из пользовательской папки было бы удобным и простым.
FuzzyQ
1
Пожалуйста. Я как бы воспринял это как вызов, и я хотел больше узнать о LightDM. Правильно, пользователь все равно увидит все остальные опции, это просто не имеет значения, так как они будут вынуждены использовать LXDE. Как я уже сказал, файл .dmrc предназначен для сохранения пользовательских настроек по умолчанию, но да, нет встроенного способа заставить пользователя использовать только определенные DE или ограничить, какие из них они могут видеть / использовать. Это все или никто, без взлома, который я представил.
reverendj1
1

в Debian Squeeze и Wheezy вы также можете добавить .xsessionrc одной строкой

экспорт STARTUP = XXX

(где XXX - ваш принудительный сценарий сеанса, см. Exec-Line выше) в домашнем каталоге пользователя для принудительного определения определенного типа сеанса независимо от того, что выбрал пользователь.

Также должен работать на Ubuntu.

(Загляните в /etc/X11/Xsession.d/40x11-common_xsessionrc и 50x11-common_determine-startup, чтобы понять, почему это работает)

Питер
источник
0

Ответ от reverendj1 не работал для меня. Причиной может быть то, что значение, указанное вами в Exec =, не выполняется напрямую, а передается в / etc / X11 / Xsession в качестве аргумента. (источник: https://askubuntu.com/a/857420/873016 )

Другое решение проблемы:
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
  1. Убедитесь, что файл ~ / .xsession является исполняемым
sudo chmod +x ~/.xsession

Протестировано на Ubuntu 16.04 с lightdm

egodigitus
источник