啟動時自動執行 sudo 命令
為了調整我的華碩 Zenbook 上的螢幕鍵盤背光,我正在使用我在這裡找到的核心模組。根據他的指示,要使用簡單的
screenpad x
命令來調整亮度來製作鍵綁定快捷方式,我需要添加sudo chmod a+w '/sys/class/leds/asus::screenpad/brightness'
到“rc.local”,因為每次重新啟動都需要該命令,並且每次都需要密碼。通過自動執行,我可以立即使用自定義鍵盤快捷鍵,因為它們可以在 Windows 上的驅動程序中正常執行,而無需在每次啟動時執行命令並輸入我的密碼。我是 Parrot OS 上的新 Linux 使用者。根據我收集到的資訊,不建議使用 rc.local,我應該使用 systemd、cronjob 或使用 GUI 啟動應用程序菜單將其作為程序執行。
對於使用 systemd 或 cronjob 執行此操作,我完全迷失了。我嘗試製作一個名為“screenpad-perms.sh”的文件並將其放入 /usr/local/bin,根據我所讀到的內容,其中僅包含以下幾行:
#! /bin/bash sudo chmod a+w '/sys/class/leds/asus::screenpad/brightness'
然後我使用
chmod +x screenpad-perms.sh
. 最後,我打開 GUI Autostart 應用程序並將其添加為登錄腳本。重新啟動PC但它不起作用,鍵入
screenpad x
會出現權限被拒絕錯誤,除非我手動鍵入sudo chmod a+w '/sys/class/leds/asus::screenpad/brightness'
並輸入我的密碼;所以它似乎沒有執行。再次道歉,因為我對 Linux 很陌生,只是真的希望讓這個螢幕正常工作。我在這裡想念什麼?
如果您的系統正在使用 systemd,那麼這是您想要做的最佳選擇。systemd 單元已經以 root 身份執行,因此不需要 sudo,您可以將其設置為在啟動期間執行,甚至不需要任何人登錄。
這是有關 systemd 資訊的一個連結:https ://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files
systemd 單元文件或多或少類似於 Microsoft
*.INI
文件。他們[SectionHeadings]
跟著Directive=Value
線。以下是您需要的步驟:
- 載入一個 root shell (
sudo bash
) 或為大多數命令添加前綴sudo
以作為 root 執行。- 為 systemd 服務單元創建一個 shell 腳本來執行。通常,您會將文件放在
/usr/local/sbin
. 讓我們稱之為/usr/local/sbin/fix-backlight.sh
(作為根):編輯器 /usr/local/sbin/fix-backlight.sh
(假設
editor
啟動您喜歡的編輯器,如果文件不存在,它會創建該文件。)
- 在文件中,輸入(#!必須是文件的第一行):
#!/bin/bash
chmod a+w ‘/sys/class/leds/asus::screenpad/brightness’
- 繼續並保存它並關閉您的編輯器。然後使文件只能由root讀取/寫入/可執行(為了安全):
chmod 0700 /usr/local/sbin/fix-backlight.sh
- 創建 systemd 單元文件(通常在
/etc/systemd/system
,但還有其他位置;上面的連結提供了更多詳細資訊):編輯器 /etc/systemd/system/fix-backlight.service
- 在該文件的編輯器中,輸入:
$$ Unit $$
說明=修復“screenpad x”背光命令的權限
$$ Service $$
ExecStart=/usr/local/sbin/fix-backlight.sh
$$ Install $$
WantedBy=多使用者.target
- 保存並退出編輯器。測試單元:
systemctl start fix-backlight.service
- 如果一切順利並且從(非 root)shell 中“screenpad x”命令正在工作,請啟用該單元以在啟動時啟動:
systemctl enable fix-backlight.service
- 然後繼續並重新啟動,並確保它現在一切正常。(如果不這樣做並炸毀鄰居的貓,那就怪狗!)
如果需要,您還
systemctl disable fix-backlight.service
可以使其在啟動時停止執行。