Como restringir um usuário a um ambiente de área de trabalho específico?

8

Estou executando uma instalação mais ou menos padrão do Ubuntu Precise 12.04 e estou bastante satisfeito com a tarefa diária do ambiente de área de trabalho Unity.

No entanto, quando se trata de tocar, me sinto muito mais confortável com o LXDE (em segundo plano: no estado atual, o Unity registra taxas de quadros muito mais baixas do que, por exemplo, Unity 2D ou LXDE - é um bug conhecido e está sendo trabalhado).

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

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

Agradecemos antecipadamente por qualquer insight que possa ser útil!

FuzzyQ
fonte
Ele deve manter sua última escolha como padrão para a próxima vez. Não está fazendo isso? Existe um motivo para você não querer as outras opções, se elas estiverem por padrão no ambiente de área de trabalho correto?
Revendj1
Percebi esse comportamento também depois que fiz a pergunta. Basicamente, isso já é o que eu queria e por que perguntei. Além disso, ainda estou interessado em uma solução - preciso aprender mais sobre grupos e permissões '') Estou muito surpreso que esse parece ser um problema tão grande. É impossível realizar?
FuzzyQ

Respostas:

4

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

Você pode, no entanto, fazer com que o usuário não possa mudar isso. Esse usuário ainda poderá selecionar um ambiente de área de trabalho diferente, mas, se o fizer, não mudará o padrão. Acredito que esta é a maneira mais segura de fazer isso, se você não estiver preocupado que a pessoa mude. Tudo o que você precisa fazer é editar o .dmrcarquivo (localizado no diretório inicial, por exemplo, / home / user). É aqui que a sessão padrão é armazenada. Mude a Sessionvariável nesse arquivo para o que quiser, ou ubuntuseja, o Unity DE padrão, o ubuntu-2dUnity 2D e o LXDELXDE. Para fazer isso, isso não será 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 deseja que esse usuário efetue login com outro DE, eu descobri uma maneira realmente hacky (ou seja, faça isso por seu próprio risco) para fazer isso. Eu estava meio entediado e isso parecia uma coisa divertida de se tentar. Todos os diferentes DEs que o LightDM pode ver são mantidos /usr/share/xsessionscomo .desktoparquivos. Para sua informação, você pode excluir qualquer uma dessas opções que não deseja que apareça na tela de login (mas isso a removerá para TODOS os usuários). Se você abrir qualquer um deles, eles são bastante diretos. Eles são arquivos básicos do iniciador de área de trabalho, assim como todos os atalhos na área de trabalho. Cada um contém umExeclinha, que é executada quando você escolhe seu DE na tela de login (ou seja, qual DE é iniciado). Vamos tirar proveito disso e verificar qual usuário está efetuando login. Se o usuário for nosso usuário restrito, forçaremos o uso de um determinado DE.

Primeiro, para cada .desktoparquivo em que /usr/share/xsessions/você precisará criar um script /usr/local/bin. No meu exemplo, mostrarei como fazer isso ubuntu.desktop, que é o DE da unidade, e usando o LXDE como DE, estamos forçando nosso usuário restrito (usuário restrito) a usar. Olhando para o LXDE.desktop, podemos ver que o Execcomando é /usr/bin/startlxdee não existe nenhum TryExeccomando. Quando você abre ubuntu.desktop, vemos que o Execcomando é gnome-session --session=ubuntue o TryExeccomando é unity. O TryExeccomando é exatamente o que parece. Depois de executar o Execcomando, ele tentará executá-lo TryExec, mas se falhar, não falhará.

Agora, pegando os comandos que obtemos dos .desktoparquivos, podemos criar nossos scripts. Vamos colocá-los /usr/share/bin. Precisamos fazer dois, um para o Exece outro para o TryExec. 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 é 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 o nosso ubuntu.desktoppara que ele chame nossos scripts, em vez dos DEs reais. Comente as linhas Exece TryExecno arquivo e substitua-as por:

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

Apenas repita o processo para quaisquer outros DEs que você possa ter. Se não houver TryExecum DE, não será necessário criar um script detry.sh para ele, pois o LXDE não usa a TryExec. Obviamente, isso é um pouco invasivo e você deve fazer o backup dos arquivos antes de editá-los, mas funcionará se você precisar absolutamente garantir que um usuário esteja efetuando login na DE correta.

reverendj1
fonte
1
Primeiro de tudo: obrigado pela sua resposta elaborada! Essa é uma abordagem bastante astuta. Mas se eu acertar a última parte, isso forçará o usuário restrito a efetuar login no lxde, independentemente da opção escolhida no lightdm . Mas ainda mostrará todas as outras opções listadas em / usr / share / xsessions /, estou acertando? Nesse caso, prefiro optar pela opção 1. É uma pena que não haja uma opção específica do usuário para configurar sessões do ambiente de área de trabalho. Remover xsessions indesejadas de uma pasta do usuário seria útil e simples.
FuzzyQ 22/08/12
1
De nada. Eu meio que tomei isso como um desafio, e eu pretendo me aprofundar mais no LightDM. Certo, o usuário ainda verá todas as outras opções, isso simplesmente não importa, pois elas serão forçadas a usar o LXDE. Como eu disse, o arquivo .dmrc existe para manter os padrões específicos do usuário, mas sim, não há uma maneira integrada de forçar um usuário a usar apenas determinados DEs ou restringir quais eles podem ver / usar. É todo mundo ou ninguém, sem o truque que apresentei.
precisa
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, consulte Exec-Line acima) no diretório doméstico do usuário para forçar um determinado tipo de sessão, independentemente da escolha do usuário.

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)

Pedro
fonte
0

A resposta do reverendj1 não estava funcionando para mim. O motivo pode ser que o valor especificado em Exec = não seja executado diretamente, mas passado para a / etc / X11 / Xsession como argumento. (fonte: https://askubuntu.com/a/857420/873016 )

Outra solução para o problema:
1. Faça backup de todos os arquivos
/ usr / share / xsessions / .desktop 2. Exclua todos os arquivos / usr / share / xsessions / .desktop
3. Crie apenas /usr/share/xsessions/default.desktop com

[Desktop Entry]
Name=Default
Comment=This session is the default session. It will look up the user specific desktop session in ~/.xsession.
Exec=default

"padrão" é uma palavra-chave para o Xsession e procurará a sessão específica no diretório do usuário.
4. Agora, crie um arquivo /home/{username}/.xsession para cada nome de usuário. Para um aplicativo "parecido com um quiosque", deve ser assim:

#!/bin/bash

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

Se, por exemplo, outro usuário tiver permissão para iniciar um gerenciador de desktop completo, ele pode se parecer com o seguinte:

#!/bin/bash

exec icewm-session
  1. Verifique se o arquivo ~ / .xsession é executável
sudo chmod +x ~/.xsession

Testado no ubuntu 16.04 com lightdm

egodigito
fonte