Como faço para restringir um usuário a um ambiente de desktop específico?

8

Estou executando uma instalação mais ou menos padrão do Ubuntu Precise 12.04 e estou bastante satisfeito em realizar tarefas diárias com o ambiente de desktop Unity.

Quando se trata de tocar, no entanto, me sinto muito mais confortável com o LXDE (em seu estado atual, o Unity tem taxas de quadros muito mais baixas do que por exemplo Unity 2D ou LXDE - é um bug conhecido e está sendo trabalhado). p>

Para isso, criei um perfil de usuário jogador e agora quero restringi-lo para usar apenas o ambiente de trabalho LXDE.

Para mais detalhes: quando solicitado a efetuar login após a inicialização, quero que apenas o LXDE apareça como uma opção para o perfil do usuário na tela de login, enquanto meu perfil de usuário padrão ainda deve ter a opção de escolher qual ambiente de desktop usar. .

Agradecemos antecipadamente por qualquer insight que possa ser de ajuda!

    
por FuzzyQ 05.08.2012 / 17:53

2 respostas

4

Ok, pelo meu entendimento do LightDM (o gerenciador de login), ele não parece ter suporte para restringir os ambientes de desktop para um usuário específico . É tudo ou nada. Por padrão, quando um usuário escolhe um ambiente de área de trabalho, ele se tornará seu ambiente de área de trabalho padrão. Quando eles fizerem login da próxima vez, a menos que escolham outro, eles farão o login no padrão.

Você pode, no entanto, fazer com que o usuário não possa alterar isso. Esse usuário ainda poderá selecionar um ambiente de área de trabalho diferente, mas, se o fizer, não alterará seu padrão. Eu acredito que esta é a maneira mais segura de fazer isso, se você não está preocupado que a pessoa vai mudar isso. Tudo o que você precisa fazer é editar o arquivo .dmrc (localizado em seu diretório pessoal, por exemplo, / home / user). É aqui que a sessão padrão é armazenada. Altere a variável Session nesse arquivo para o que você quiser, ou seja, ubuntu é a unidade padrão DE, ubuntu-2d é Unity 2D e LXDE é LXDE. Para que isso não seja alterado se eles fizerem login com outro DE, podemos simplesmente torná-lo imutável (imutável):

sudo chattr +i /home/user/.dmrc

Agora, ninguém poderá alterar esse arquivo (raiz e outros programas incluídos), a menos que você remova o sinalizador imutável:

sudo chattr -i /home/user/.dmrc

Se você absolutamente NÃO quer que esse usuário faça login com outro DE, eu descobri uma maneira realmente hacky (isto é, por sua conta e risco) para conseguir isso. Eu estava meio entediada e isso parecia uma coisa divertida para tentar. Todos os diferentes DEs que o LightDM pode ver são mantidos em /usr/share/xsessions as .desktop files. Para sua informação, você pode deletar qualquer um que não queira aparecer na tela de login (mas isso irá removê-lo para TODOS os usuários). Se você abrir qualquer um desses, eles serão bastante diretos. Eles são arquivos básicos do desktop, assim como todos os atalhos da área de trabalho. Cada um contém uma linha Exec , que é executada quando você escolhe seu DE na tela de login (ou seja, qual DE é iniciado). Vamos aproveitar isso e verificar qual usuário está fazendo o login. Se o usuário for nosso usuário restrito, vamos forçá-lo a usar um determinado DE.

Primeiro, para cada arquivo .desktop em /usr/share/xsessions/ , você precisará criar um script em /usr/local/bin . Para o meu exemplo, mostrarei como fazer isso para ubuntu.desktop , que é o Unity DE e, usando o LXDE como o DE, estamos forçando o uso de nosso usuário restrito (restricteduser). Observando o LXDE.desktop, podemos ver que o comando Exec é /usr/bin/startlxde e não há nenhum comando TryExec . Quando você abre ubuntu.desktop , vemos que o comando Exec é gnome-session --session=ubuntu e o comando TryExec é unity . O comando TryExec é exatamente o que parece. Depois de executar o comando Exec , ele tentará executar o comando TryExec , mas se falhar, ele não falhará.

Agora, pegando esses comandos dos arquivos .desktop , podemos criar nossos scripts. Vamos colocá-los em /usr/share/bin . Precisamos fazer dois, um para o Exec e um para o TryExec . Nós faremos algo assim:

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

Estamos apenas testando se a pessoa que está efetuando login é o nosso usuário restrito e ativando o DE apropriado. Agora, precisamos garantir que eles sejam executáveis:

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

Agora precisamos alterar nosso ubuntu.desktop para que ele chame nossos scripts, em vez dos DEs reais. Comente as linhas Exec e TryExec no arquivo e substitua-as por:

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

Repita o processo para quaisquer outros DEs que você possa ter. Se não houver TryExec para um DE, não será necessário criar um script detry.sh para ele, pois o LXDE não usa TryExec . Obviamente, isso é um pouco hacky, e você deve se certificar de fazer backup de todos os arquivos antes de editá-los, mas funcionará se você realmente precisar se certificar de que um usuário está efetuando login no DE correto.

    
por reverendj1 22.08.2012 / 17:32
1

no Debian Squeeze e Wheezy você também pode adicionar um .xsessionrc com uma única linha

exportar STARTUP = XXX

(onde XXX é seu script de sessão forçado, veja Linha Exec acima) no diretório de usuário para forçar um determinado tipo de sessão, independentemente do que o usuário tenha escolhido.

Também deve funcionar no Ubuntu.

(Dê uma olhada em /etc/X11/Xsession.d/40x11-common_xsessionrc e 50x11-common_determine-startup para ver por que isso funciona)

    
por Peter 28.06.2014 / 12:53