如何让 xrandr 在没有 sudo 的情况下工作?

如何让 xrandr 在没有 sudo 的情况下工作?

我通过以下方式切换我的分辨率:

sudo xrandr --output eDP-1-1 --mode "3840x2400"

如何使 xrandr 不需要 sudo?所以例如我可以这样做:

xrandr --output eDP-1-1 --mode "3840x2400"

我在video群里。我不想在常规文件中公开我的密码,但我愿意制作某种系统脚本,仅出于xrandr某种目的而临时自动成为 root。

(当我单击菜单栏中的切换按钮时,将调用该脚本,因此实际上它将是一个 python 脚本,用于检测分辨率并在 3840x2400 和 1920x1200 之间切换。)


编辑:我相信一些奇怪的情况导致 xrandr 需要以 root 身份运行。这可能是 nvidia-drm.modeset kernal 参数,或者类似的东西尽管存在模型行,但仍必须手动重新添加模型行。如果您发现自己处于这种情况,我真的不知道该怎么建议。请随意发表评论。不知何故,重新启动后,使用 sudo 的要求就消失了。我接受最上面的答案。

答案1

  1. xrandr不需要sudo.如果用户登录到 X 会话,他们可以运行xrandr以查询和更改屏幕设置。

  2. 可以进行设置/etc/sudoers,以便用户(或多个用户)可以以 root 身份运行命令,而无需输入密码。这最好与一个简短的包装脚本结合使用,该脚本只执行需要 root 的一件事,而不执行其他操作。然后允许该脚本由用户以 root 身份运行NOPASSWD:

    如果可能的话,像这样的包装器脚本最好不采用任何参数或其他用户提供的输入。如果用户输入是不可避免的,那么它应该采取最低限度的必要措施来完成所需的工作并在使用之前验证所有输入(并且,为了更好的安全性,它应该检查已知的坏事并拒绝它们,而不是检查已知的坏事并拒绝它们) -好的事情并拒绝其他一切)。

    例如

    #!/bin/sh
    xrandr --output eDP-1-1 --mode "3840x2400"
    

    将其另存为,例如mode3840x2400.sh,使其可执行chmod,并添加如下内容/etc/sudoers(不要直接编辑此文件,请使用visudo):

    username ALL = NOPASSWD: /full/path/to/mode3840x2400.sh
    

或者,这里是一个包装器脚本的示例,它接受请求您所需的分辨率设置的参数,同时拒绝其他所有设置。如果未提供参数,则默认为 1920。

#!/bin/sh
res=${1:-1}

case "$res" in
  1) xrandr --output eDP-1-1 --mode "1920x1200" ;;
  2) xrandr --output eDP-1-1 --mode "3840x2400" ;;
  *) echo "Error: unknown argument '$res'" > /dev/stderr; exit 1;
esac

顺便说一句,如上所述,xrandr 不需要sudo工作- 任何登录X的用户都可以运行它。我只是将它用作可以以 root 身份运行的示例。

相关内容