我總是在控制台模式下啟動我的 GNU/Linux 筆記型電腦。但有時我需要調出 GUI 模式。它總是要求輸入 root 密碼。所以我編寫了以下腳本“gogui.sh”並將其放入/usr/bin
:
#!/bin/bash
echo "mypassword" | sudo service lightdm start
這是一個非常愚蠢的想法,就好像有人讀取了該文件,可以輕鬆看到我的密碼一樣。
有替代方案嗎?
答案1
在腳本中向 sudo 傳遞密碼是完全沒有意義的。相反,添加 sudo 規則NOPASSWD
新增您想要使用標籤運行的特定命令。請注意,特定於命令的NOPASSWD
規則必須位於任何一般規則之後。
saeid ALL = (ALL:ALL) ALL
saeid ALL = (root) NOPASSWD: service lightdm start
但這可能無論如何都沒有用。lightdm start
啟動登入提示,但只有當您想讓其他使用者以圖形方式登入時才需要它。如果您只想啟動 GUI 會話,則不需要它。相反,請致電startx
從文字模式會話啟動 GUI 會話。這不需要任何額外的特權。
您可能需要明確指定您的視窗管理器或桌面環境,因為startx
可能不會選擇 lightdm 使用的相同預設會話類型。
startx -- gnome-session
答案2
有一些選項,其中之一是使用visudo
NOPASSWD 標誌添加特定命令:
%wheel ALL=(ALL) NOPASSWD: /path/to/myscript
cat /path/to/myscript
#!/bin/bash
service lightdm start
答案3
編輯
剛剛注意到您在評論中提到了 Unity,所以看起來您正在運行 Ubuntu。我原來的答案是針對系統初始化系統,但命令如telinit
為了相容性仍然存在,並將在發行版上使用系統或者暴發戶。
系統V方式
telinit 5
在現代 Systemd 系統上,telinit
被重定向到systemctl
。
系統方式
systemctl isolate runlevel5.target
或者
systemctl isolate graphical.target
原答案:
在較舊的非 Systemd 發行版(例如 RHEL/CentOS 6 及更早版本)上,從控制台模式切換到 GUI 的最簡單方法是使用telinit
命令。例如,在 RHEL/Centos 發行版上,多用戶基於文字的模式是運行等級 3,多用戶 GUI 模式是運行等級 5 telinit
。若要以普通使用者身分執行且無需密碼,您需要輸入一個sudoers
條目或在 telinit 執行檔上設定 setuid 標誌。該sudo
方法是首選方法,因為它可以僅限於您的帳戶。
答案4
由於您具體指的是sudo
,請堅持吉爾斯的回答。但是,由於您的問題標題只是關於獲取程式的密碼stdin
,而我最近也遇到了類似的情況:
echo $(read -sp "Password: " password; echo $password) | yourcommand
我可能會因此受到一些批評,但它確實有效。
說到bash
這裡,你可能還可以使用
yourcommand <$(read -sp "Password: " password; echo $password)