启动时自动运行 sudo 命令

启动时自动运行 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 自动启动应用程序并将其添加为登录脚本。

重新启动电脑,但它不起作用,除非我手动键入并输入密码,否则键入screenpad x会出现权限被拒绝错误;sudo chmod a+w '/sys/class/leds/asus::screenpad/brightness'所以它似乎没有被执行。

再次抱歉,因为我对 Linux 还很陌生,只是希望这个屏幕能够正常工作。我在这里缺少什么?

答案1

如果您的系统正在使用 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. 创建一个 shell 脚本供 systemd 服务单元执行。通常,您会将文件放入/usr/local/sbin.让我们称它为/usr/local/sbin/fix-backlight.shroot:

    编辑/usr/local/sbin/fix-backlight.sh

(假设editor启动您首选的编辑器,如果该文件不存在,它会创建该文件。)

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

    #!/bin/bash
    chmod a+w '/sys/class/leds/asus::screenpad/brightness'

  2. 继续保存并关闭编辑器。然后使该文件只能由 root 读/写/可执行(出于安全考虑):

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

  3. 创建 systemd 单元文件(通常在 中/etc/systemd/system,但也有其他位置;上面的链接提供了更多详细信息):

    编辑/etc/systemd/system/fix-backlight.service

  4. 在该文件的编辑器中,输入:

    [Unit]
    Description=修复“screenpad x”背光命令的权限
    [Service]
    ExecStart=/usr/local/sbin/fix-backlight.sh
    [Install]
    WantedBy=multi-user.target

  5. 保存并退出编辑器。测试单位:

    systemctl 启动修复背光.service

  6. 如果一切顺利并且从(非 root)shell 中“screenpad x”命令正在工作,则使设备能够在启动时启动:

    systemctl 启用修复背光.service

  7. 然后继续并重新启动,并确保现在一切正常。 (如果它不这样做并炸毁了邻居的猫,那就怪狗吧!)

如果需要,您还可以systemctl disable fix-backlight.service使其在启动时停止运行。

答案2

也许您需要在 sudoers 文件中启用此 cmd,因此此特定 cmd 将不再需要密码。 Sudoers 是一个配置文件,您可以在其中管理 sudo 相关问题:

sudo EDITOR=nano visudo

要通过 visudo 使用 nano 编辑文件(推荐),请添加:

[YOUR_USERNAME] ALL=(ALL) NOPASSWD:/bin/chmod u+w /sys/class/leds/asus::screenpad/brightness

插入不带括号的用户名,并通过执行以下命令添加 chmod 的正确位置:

which chmod

对我来说是/bin/chmod

基本上,您允许每个以您身份登录的人在没有密码提示的情况下执行此命令,但请小心,sudoers 文件非常重要,如果您保存文件时出现一个小拼写错误,则可能会破坏您的系统。这就是为什么您应该使用visudo它来编辑它,因为它不会保存有错误的配置文件。每次我以这种方式重新启动时,我都会更换我的Mac,所以它对我有用。

相关内容