Eu sempre inicializo meu laptop GNU/Linux no modo console. Mas às vezes preciso ativar o modo GUI. sempre requer a inserção da senha root. Então escrevi o seguinte script "gogui.sh" e coloquei-o /usr/bin
:
#!/bin/bash
echo "mypassword" | sudo service lightdm start
É uma ideia realmente estúpida, como se alguém lesse o arquivo pudesse ver facilmente minha senha.
É uma alternativa para isso?
Responder1
Passar uma senha para o sudo em um script é totalmente inútil. Em vez disso, adicione uma regra sudoadicionando o comando específico que você deseja executar com a NOPASSWD
tag. Tome cuidado para que a NOPASSWD
regra específica do comando venha depois de qualquer regra geral.
saeid ALL = (ALL:ALL) ALL
saeid ALL = (root) NOPASSWD: service lightdm start
Mas isso provavelmente não é útil de qualquer maneira. lightdm start
inicia um prompt de login, mas você só precisa disso se quiser permitir que outros usuários façam login graficamente. Você não precisa disso se tudo o que deseja é iniciar uma sessão GUI. Em vez disso, liguestartx
para iniciar uma sessão GUI a partir de sua sessão em modo texto. Isso não requer nenhum privilégio extra.
Pode ser necessário especificar explicitamente seu gerenciador de janelas ou ambiente de área de trabalho, pois startx
pode não escolher o mesmo tipo de sessão padrão que o lightdm usa.
startx -- gnome-session
Responder2
Existem algumas opções, e uma delas é adicionar o comando específico usando visudo
o flag NOPASSWD:
%wheel ALL=(ALL) NOPASSWD: /path/to/myscript
cat /path/to/myscript
#!/bin/bash
service lightdm start
Responder3
EDITAR
Acabei de notar em seus comentários que você mencionou o Unity, então parece que você está executando o Ubuntu. Minha resposta original foi voltada paraSysVinitsistemas, mas comandos comotelinit
ainda existem para compatibilidade e funcionarão em distros usandoSistemaouSubir na vida.
Maneira SysV
telinit 5
Em sistemas Systemd modernos,telinit
é redirecionado parasystemctl
.
Maneira do sistema
systemctl isolate runlevel5.target
ou
systemctl isolate graphical.target
Resposta original:
Em distros mais antigas que não sejam Systemd (RHEL/CentOS 6 e anteriores, por exemplo), a maneira mais fácil de alternar do modo console para GUI é com otelinit
comando. Nas distribuições RHEL/Centos, por exemplo, o modo multiusuário baseado em texto é executado no nível 3 e o modo GUI multiusuário é executado no nível 5. A mudança do modo console para o modo GUI seria feita assim: Por padrão, telinit
requer root privilégios. Para executar isso como um usuário normal sem senha, você precisará de uma sudoers
entrada ou definir o sinalizador setuid definido no executável telinit. O sudo
método é a abordagem preferida, pois pode ser restrito apenas à sua conta.
Responder4
Como você está se referindo especificamente a sudo
, sigaResposta de Gilles. No entanto, como o título da sua pergunta era apenas sobre como obter uma senha para um programa, stdin
tive uma situação semelhante recentemente:
echo $(read -sp "Password: " password; echo $password) | yourcommand
Provavelmente ganharei algumas críticas por isso, mas funcionou.
Falando nisso bash
, você provavelmente também pode usar
yourcommand <$(read -sp "Password: " password; echo $password)