Systemd

啟動時自動執行 sudo 命令

  • April 27, 2021

為了調整我的華碩 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線。

以下是您需要的步驟:

  1. 載入一個 root shell ( sudo bash) 或為大多數命令添加前綴sudo以作為 root 執行。
  2. 為 systemd 服務單元創建一個 shell 腳本來執行。通常,您會將文件放在/usr/local/sbin. 讓我們稱之為/usr/local/sbin/fix-backlight.sh(作為根):

編輯器 /usr/local/sbin/fix-backlight.sh

(假設editor啟動您喜歡的編輯器,如果文件不存在,它會創建該文件。)

  1. 在文件中,輸入(#!必須是文件的第一行):

#!/bin/bash

chmod a+w ‘/sys/class/leds/asus::screenpad/brightness’

  1. 繼續並保存它並關閉您的編輯器。然後使文件只能由root讀取/寫入/可執行(為了安全):

chmod 0700 /usr/local/sbin/fix-backlight.sh

  1. 創建 systemd 單元文件(通常在/etc/systemd/system,但還有其他位置;上面的連結提供了更多詳細資訊):

編輯器 /etc/systemd/system/fix-backlight.service

  1. 在該文件的編輯器中,輸入:

$$ Unit $$

說明=修復“screenpad x”背光命令的權限

$$ Service $$

ExecStart=/usr/local/sbin/fix-backlight.sh

$$ Install $$

WantedBy=多使用者.target

  1. 保存並退出編輯器。測試單元:

systemctl start fix-backlight.service

  1. 如果一切順利並且從(非 root)shell 中“screenpad x”命令正在工作,請啟用該單元以在啟動時啟動:

systemctl enable fix-backlight.service

  1. 然後繼續並重新啟動,並確保它現在一切正常。(如果不這樣做並炸毀鄰居的貓,那就怪狗!)

如果需要,您還systemctl disable fix-backlight.service可以使其在啟動時停止執行。

引用自:https://unix.stackexchange.com/questions/645914