Siempre inicio mi computadora portátil GNU/Linux en modo consola. Pero a veces necesito abrir el modo GUI. siempre requiere ingresar la contraseña de root. Entonces escribí el siguiente script "gogui.sh" y lo puse en /usr/bin
:
#!/bin/bash
echo "mypassword" | sudo service lightdm start
Es una idea realmente estúpida, como si alguien leyera el archivo y pudiera ver fácilmente mi contraseña.
¿Es la alternativa a esto?
Respuesta1
Pasar una contraseña a sudo en un script no tiene ningún sentido. En su lugar, agregue una regla sudoagregando el comando particular que desea ejecutar con la NOPASSWD
etiqueta. Tenga cuidado de que la NOPASSWD
regla específica del comando venga después de cualquier regla general.
saeid ALL = (ALL:ALL) ALL
saeid ALL = (root) NOPASSWD: service lightdm start
Pero probablemente esto no sea útil de todos modos. lightdm start
inicia un mensaje de inicio de sesión, pero solo lo necesita si desea permitir que otros usuarios inicien sesión gráficamente. No lo necesita si todo lo que desea es iniciar una sesión de GUI. En lugar de eso, llamastartx
para iniciar una sesión de GUI desde su sesión en modo texto. Esto no requiere ningún privilegio adicional.
Es posible que deba especificar explícitamente su administrador de ventanas o entorno de escritorio, ya que startx
es posible que no seleccione el mismo tipo de sesión predeterminada que usa lightdm.
startx -- gnome-session
Respuesta2
Hay algunas opciones, y una de ellas es agregar el comando específico usando visudo
el indicador NOPASSWD:
%wheel ALL=(ALL) NOPASSWD: /path/to/myscript
cat /path/to/myscript
#!/bin/bash
service lightdm start
Respuesta3
EDITAR
Acabo de notar que en tus comentarios mencionas Unity, por lo que parece que estás ejecutando Ubuntu. Mi respuesta original estaba orientada aSysVinitsistemas, pero comandos comotelinit
todavía existe por compatibilidad y funcionará en distribuciones que utilicensistemadoAdvenedizo.
Modo SysV
telinit 5
En los sistemas Systemd modernos,telinit
es redirigido asystemctl
.
Manera del sistema
systemctl isolate runlevel5.target
o
systemctl isolate graphical.target
Respuesta original:
En distribuciones más antiguas que no son Systemd (RHEL/CentOS 6 y anteriores, por ejemplo), la forma más sencilla de cambiar del modo consola al GUI es con eltelinit
dominio. En las distribuciones RHEL/Centos, por ejemplo, el modo multiusuario basado en texto se ejecuta en el nivel 3 y el modo GUI multiusuario se ejecuta en el nivel 5. El cambio del modo consola al modo GUI se haría así: De forma predeterminada, telinit
requiere root privilegios. Para ejecutar esto como un usuario normal sin contraseña, necesitará una sudoers
entrada o establecer el indicador setuid en el ejecutable de telinit. Este sudo
método es el preferido, ya que puede restringirse solo a su cuenta.
Respuesta4
Ya que te refieres específicamente a sudo
, limítate aLa respuesta de Gilles.. Sin embargo, dado que el título de su pregunta simplemente trataba sobre cómo obtener una contraseña para un programa, stdin
recientemente tuve una situación similar:
echo $(read -sp "Password: " password; echo $password) | yourcommand
Probablemente me ganaré algunos golpes por eso, pero funcionó.
Hablando de eso bash
, probablemente también puedas usar
yourcommand <$(read -sp "Password: " password; echo $password)