Execute o script .bash_profile no login

2

Estou trabalhando em um pacote deb que permite ao administrador criar outra conta e executá-la automaticamente no modo de quiosque. Eu criei o usuário, especifiquei uma tecla de atalho e coloquei isso em um arquivo oculto e criei um script .bash_profile na conta de administrador que copio para a pasta base do novo usuário.

Este é o script que estou executando para criar os arquivos e especificar a tecla de atalho:

#!/bin/bash
basis="Primary + Alt + "
shortkey='zenity --entry --text "Your shortkey will be a combination of <Primary> + <Alt> + a letter\n\n Specify your letter!"'

while [[ $shortkey = *[^A-Z]* ]];
        do
                zenity --warning --text "Input incorrect\n\nTry again"
                shortkey='zenity --entry --text "Your shortkey will be a combination of <Primary> + <Alt> + a letter\n\n Specify your letter!"'

done
        basis="$basis$shortkey"
zenity --info --text "$basis" --title="Your shortkey"

touch kiosk/kiosk-0.1/.mykey
echo "gsettings set org.gnome.desktop.wm.keybindings close [$basis]" > kiosk/kiosk-0.1/.mykey

user=$(cat kiosk/kiosk-0.1/.username)
keys=$(cat kiosk/kiosk-0.1/keys)
content=$(cat kiosk/kiosk-0.1/.mykey)

touch kiosk/kiosk-0.1/.bash_profile
echo "#!/bin/bash" >> .bash_profile
echo "" >> .bash_profile
echo $keys >> .bash_profile
echo $content >> .bash_profile
chmod +x .bash_profile
chown $user .bash_profile
mv '.bash_profile' /home/$user

Esse conteúdo copiado para .bash_profile contém código para desativar todas as chaves da interface, como:

gsettings set org.gnome.desktop.wm.keybindings begin-move []

Agora, adicionei apenas uma linha para iniciar o navegador Chromium no site certo

/usr/bin/chromium-browser www.google.be --kiosk --no-default-browser-check --disable-translate

Eu também alterei o proprietário do script .bash_profile para o usuário da conta e tornei-o executável antes de copiá-lo para a pasta inicial de novos usuários.

Agora, quando eu faço login no novo usuário, esse script não faz nada. Alguém pode ver onde estou errado em me ajudar a encontrar a solução?

    
por Gijs 12.03.2014 / 17:16

1 resposta

2

O principal problema aqui é que .bash_profile não é lido quando você faz um login gráfico. É um arquivo específico do bash, é lido quando você inicia um shell de login e duvido muito que ele seja lido em um login gráfico.

Você teria uma chance melhor de usar ~/.profile , que é i) lido pela maioria dos shells de login, não apenas bash, então você não está limitando seu usuário a um shell específico e ii) muito mais propenso a ser lido por um login gráfico.

Acabei de verificar isso e .profile é realmente lido no Ubuntu 13.04 quando você faz login graficamente. No entanto, você não pode presumir que sempre será o caso. Para mais detalhes, veja a excelente resposta de Gilles aqui .

Agora, alguns pontos menores. Não há necessidade de touch , echo "foo" >> bar criará o arquivo bar se ele não existir e será anexado a ele, se existir. Além disso, não há necessidade de .bash_profile ser executável, o arquivo é originado, não executado. Eu não sei se isso causaria problemas, mas poderia acontecer.

Finalmente, o grupo do arquivo será raiz, não o usuário. Novamente, não tenho certeza se isso é um problema, mas você pode adicionar isso ao seu script:

chown $user:$user .profile

Observe que .profile é ignorado pelo bash se um arquivo chamado ~/.bash_profile existir. Isso não deve afetar os logons gráficos, mas pode causar um comportamento inesperado ao efetuar login a partir da linha de comando.

    
por terdon 12.03.2014 / 17:33