Jak ograniczyć użytkownika do określonego środowiska pulpitu?

8

Korzystam z mniej lub bardziej standardowej instalacji Ubuntu Precise 12.04 i jestem całkiem zadowolony z wykonywania codziennych zadań w środowisku Unity.

Jednak jeśli chodzi o grę, czuję się o wiele bardziej komfortowo z LXDE (tło: w obecnym stanie Unity archiwizuje znacznie niższe liczby klatek na sekundę niż np. Unity 2D lub LXDE - to znany błąd i nad nim pracujemy).

W tym celu utworzyłem profil użytkownika dla graczy i teraz chcę go ograniczyć tylko do korzystania ze środowiska graficznego LXDE.

Aby rozwinąć tę kwestię dalej: gdy zostanie wyświetlony monit o zalogowanie się po uruchomieniu, chcę, aby tylko ekran LXDE pojawiał się jako opcja dla profilu użytkownika gracza na ekranie logowania, podczas gdy mój standardowy profil użytkownika powinien nadal mieć możliwość wyboru, którego środowiska pulpitu użyć.

Z góry dziękuję za wszelkie informacje, które mogą być pomocne!

FuzzyQ
źródło
Powinien zachować twój ostatni wybór jako domyślny na następny raz. Czy to nie robi? Czy istnieje powód, dla którego nie chcesz, aby inne opcje były ustawione domyślnie na prawidłowe środowisko pulpitu?
reverendj1,
Zauważyłem też to zachowanie po zadaniu pytania. Zasadniczo tego właśnie chciałem i dlatego zapytałem. Poza tym nadal jestem zainteresowany rozwiązaniem - muszę dowiedzieć się więcej o grupach i uprawnieniach '') Jestem bardzo zaskoczony, że wydaje się to być tak dużym problemem. Czy to niemożliwe?
FuzzyQ,

Odpowiedzi:

4

Ok, z mojego rozumienia LightDM (menedżera logowania) nie wydaje się obsługiwane ograniczanie środowisk pulpitu dla konkretnego użytkownika. Jest to umowa typu wszystko albo nic. Domyślnie, gdy użytkownik wybierze środowisko pulpitu, stanie się ono domyślnym środowiskiem pulpitu. Gdy następnym razem się zalogują, chyba że wybiorą inną, zostaną zalogowani do ustawień domyślnych.

Możesz to jednak zrobić, aby użytkownik nie mógł tego zmienić. Ten użytkownik nadal będzie mógł wybrać inne środowisko pulpitu, ale jeśli to zrobi, nie zmieni to ustawienia domyślnego. Uważam, że jest to najbezpieczniejszy sposób na zrobienie tego, jeśli nie martwisz się, że dana osoba to zmieni. Wszystko, co musisz zrobić, to edytować .dmrcplik (znajdujący się w katalogu domowym, tj. / Home / user). Tutaj przechowywana jest ich domyślna sesja. Zmień Sessionzmienną w tym pliku na cokolwiek chcesz, tj. ubuntuJest domyślnym Unity DE, ubuntu-2dUnity 2D i LXDELXDE. Aby tak się nie stało, jeśli zalogują się przy użyciu innego DE, możemy po prostu uczynić go niezmiennym (niezmiennym):

sudo chattr +i /home/user/.dmrc

Teraz nikt nie będzie mógł zmienić tego pliku (łącznie z rootem i innymi programami), chyba że usuniesz niezmienną flagę:

sudo chattr -i /home/user/.dmrc

Jeśli absolutnie NIE chcesz, aby ten użytkownik kiedykolwiek logował się przy użyciu innego DE, wymyśliłem naprawdę hackerski sposób (tj. Rób to na własne ryzyko), aby to osiągnąć. Byłem trochę znudzony i wydawało mi się to zabawną rzeczą. Wszystkie różne DE, które LightDM może zobaczyć, są przechowywane /usr/share/xsessionsjako .desktoppliki. Do Twojej wiadomości, możesz usunąć dowolne z nich, których nie chcesz wyświetlać na ekranie logowania (ale spowoduje to usunięcie WSZYSTKICH użytkowników). Jeśli otworzysz którykolwiek z nich, są one dość proste. Są to podstawowe pliki uruchamiające pulpit, podobnie jak wszystkie skróty na pulpicie. Każdy zawieraExecwiersz, który jest wykonywany po wybraniu DE na ekranie logowania (tzn. który DE zostanie uruchomiony). Wykorzystamy to i sprawdzimy, który użytkownik się loguje. Jeśli użytkownik jest naszym ograniczonym użytkownikiem, zmusimy go do korzystania z określonego DE.

Po pierwsze, dla każdego .desktoppliku /usr/share/xsessions/musisz utworzyć skrypt w /usr/local/bin. W moim przykładzie pokażę, jak to zrobić, dla ubuntu.desktopktórego jest Unity DE, i używając LXDE jako DE, do którego zmuszamy naszego ograniczonego użytkownika (ograniczonego użytkownika). Patrząc na LXDE.desktop, widzimy, że Execpolecenie jest /usr/bin/startlxdei nie ma TryExecpolecenia. Po otwarciu ubuntu.desktopwidzimy, że Execpolecenie jest, gnome-session --session=ubuntua TryExecpolecenie jest unity. TryExecKomenda jest tylko to, co brzmi jak. Po uruchomieniu Execpolecenia spróbuje je uruchomić TryExec, ale jeśli się nie powiedzie, nie ulegnie awarii.

Teraz, biorąc te polecenia, które otrzymaliśmy z .desktopplików, możemy tworzyć nasze skrypty. Włożymy je /usr/share/bin. Będziemy musieli zrobić dwa, jeden dla Execi jeden dla TryExec. Zrobimy coś takiego:

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

Właśnie testujemy, czy osoba logująca się jest naszym ograniczonym użytkownikiem i odpalamy odpowiednią licencję DE. Teraz musimy upewnić się, że są one wykonywalne:

sudo chmod +x /usr/local/bin/ubuntude.sh
sudo chmod +x /usr/local/bin/ubuntudetry.sh

Teraz musimy zmienić nasze, ubuntu.desktopaby wywoływały nasze skrypty, zamiast rzeczywistych DE. Skomentuj linie Execi TryExecw pliku i zamień je na:

Exec=/usr/local/bin/ubuntude.sh
TryExec=/usr/local/bin/ubuntudetry.sh

Po prostu powtórz proces dla wszystkich innych DE. Jeśli nie ma TryExecDE, to nie ma potrzeby tworzenia dla niego skryptu detry.sh, ponieważ LXDE nie używa TryExec. Oczywiście jest to trochę zhackowane i powinieneś upewnić się, że utworzysz kopię zapasową plików przed ich edycją, ale zadziała, jeśli absolutnie musisz upewnić się, że użytkownik loguje się do właściwej wersji DE.

reverendj1
źródło
1
Po pierwsze: dziękuję za twoją misterną odpowiedź! To dość sprytne podejście. Ale jeśli dobrze zrozumiem tę ostatnią część, zmusi to ograniczonego użytkownika do zalogowania się do lxde bez względu na to, którą opcję wybrał w lightdm . Ale nadal będzie wyświetlać wszystkie inne opcje wymienione w / usr / share / xsessions /, czy mam rację? W takim przypadku wolałbym wybrać opcję 1. Szkoda, że ​​nie ma specyficznej dla użytkownika opcji konfigurowania sesji środowiska pulpitu. Usuwanie niechcianych Xsessions z folderu użytkownika byłoby zarówno przydatne, jak i proste.
FuzzyQ,
1
Nie ma za co. W pewnym sensie podjąłem to za wyzwanie i chciałem bardziej zagłębić się w LightDM. Racja, użytkownik nadal widzi wszystkie inne opcje, to po prostu nie ma znaczenia, ponieważ będą zmuszeni do korzystania z LXDE. Tak jak powiedziałem, plik .dmrc służy do zachowania ustawień domyślnych specyficznych dla użytkownika, ale tak, nie ma wbudowanego sposobu, aby zmusić użytkownika do używania tylko niektórych DE lub ograniczyć, które z nich mogą zobaczyć / użyć. To wszyscy lub nikt, bez przedstawionego przeze mnie hacka.
reverendj1
1

w Debian Squeeze i Wheezy możesz również dodać .xsessionrc za pomocą jednej linii

eksport STARTUP = XXX

(gdzie XXX jest wymuszonym skryptem sesji, patrz wiersz wiersza powyżej) w katalogu głównym użytkownika, aby wymusić określony typ sesji, niezależnie od tego, co wybrał użytkownik.

Powinien również działać na Ubuntu.

(Spójrz na /etc/X11/Xsession.d/40x11-common_xsessionrc i 50x11-common_determine-startup, aby zobaczyć, dlaczego to działa)

Piotr
źródło
0

Odpowiedź reverendj1 nie działała dla mnie. Przyczyną może być to, że wartość określona w Exec = nie jest wykonywana bezpośrednio, ale przekazywana do / etc / X11 / Xsession jako argument. (źródło: https://askubuntu.com/a/857420/873016 )

Inne rozwiązanie problemu:
1. Wykonaj kopię zapasową wszystkich plików
/ usr / share / xsessions / .desktop 2. Usuń wszystkie pliki / usr / share / xsessions / .desktop
3. Utwórz tylko /usr/share/xsessions/default.desktop za pomocą

[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” jest kluczowym słowem dla Xsession i wyszukuje konkretną sesję w katalogu użytkownika.
4. Teraz utwórz plik /home/{username}/.xsession dla każdej nazwy użytkownika. W przypadku aplikacji „podobnej do kiosku” powinna ona wyglądać następująco:

#!/bin/bash

cd /home/{yourUsername}/ && ./startApplication.py
logout

Jeśli np. Inny użytkownik powinien mieć możliwość uruchomienia pełnego menedżera pulpitu, może to wyglądać tak:

#!/bin/bash

exec icewm-session
  1. Upewnij się, że plik ~ / .xsession jest wykonywalny
sudo chmod +x ~/.xsession

Testowane na Ubuntu 16.04 z lightdm

egodigitus
źródło