Хорошо, из моего понимания 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, который мы вынуждаем использовать нашего ограниченного пользователя (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.