如何在 rc.local 中以非 root 用户身份启动 X?

如何在 rc.local 中以非 root 用户身份启动 X?

我正在尝试startx以非 root 用户身份启动已安装的Ubuntu-server 16.04( Linux nanopim1 3.4.113-sun8i #16 SMP PREEMPT Tue Jun 13 14:15:57 CEST 2017 armv7l armv7l armv7l GNU/Linux) 。openbox

我尝试将这些文件逐个放入其中,/rc.local但没有成功!唯一有效的方法是放入任何文件startx而不添加任何内容/etc/rc.local,然后它以 root 身份启动!

su -l m -c startx

su -s /bin/bash -c startx m&

su - m -c startx

我也尝试了另一种方法,我确实在这里创建了一个文件:/etc/systemd/system/autologin.service内容如下:

[Unit]
Description=Autologin service

[Service]
Type=fork
user=m
group=m
ExecStart=/usr/bin/startx
TimeoutSec=0

[Install]
WantedBy=multi-user.target

然后:sudo systemctl daemon-reload但是又没起作用!!!

只放在startx里面/etc/local是不行的,但root我不想成为用户!

答案1

显示管理器版本(更简单)

显示管理器通常负责显示登录屏幕并启动用户会话。如果您有显示管理器,将其设置为自动登录将是阻力最小的途径。它是一种广泛使用且可能经过充分测试和支持的解决方案。您需要将其设置为 1) 自动登录和 2) 使用您喜欢的会话,但两者通常都受 Linux 支持的常用显示管理器(lightdm、xdm 等)的支持。

在 ubuntu 16.04(非服务器)上,我有以下内容/etc/lightdm/lightdm.conf

[Seat:*]
autologin-guest=false
autologin-user=xyz
autologin-user-timeout=0

您需要安装并启用 lightdm

apt-get install lightdm

Lightdm 是默认的 ubuntu 显示管理器。默认情况下,它不会安装在 ubuntu 服务器版本上,并且您将安装多个软件包,因此如果您想避免使用它们,则需要更困难的手动方式。

此处更好地描述了在 ubuntu 服务器上设置图形登录的方法https://askubuntu.com/questions/53822/how-do-you-run-ubuntu-server-with-a-gui#788193,之后您可以根据需要设置自动登录。

您可能需要选择您喜欢的会话类型(openbox),方法是设置/home/username/.dmrc如下

[Desktop]
Session=openbox

手册 (startx)

我不知道在启动时启动 x 会话 startx 到底需要什么,但我建议将问题分解为逐步的过程:

  1. 您说 startx 可以以 root 身份运行。最好验证一下您是否可以以 root 身份登录到控制台并使用以下命令启动 x 会话:

    root@xyz # startx
    
  2. 确保您以首选用户身份登录时可以启动 X 会话。

    myuser@xyz $ startx
    
  3. 确保您能够以首选用户身份启动 X 会话,但同时以 root 身份登录,方法是基于上一个命令:

    a)使用类似:

    root@xyz # su -l myuser -c startx
    

    如果需要多个参数,请引用该命令:

    root@xyz # su -l myuser -c "startx arg1 arg2 .."
    

    b) 如果您在 systemd 单元中设置了用户,则可以跳过此步骤。

  4. 使其自动启动。

    a) 添加(3a)命令/etc/rc.local并重新启动。

    b) 使用您描述的 systemd 单元,并按照 2/3 设置命令。要进行测试,您可以使用类似

    root@xyz # systemctl stop autologin  # make sure to reset service
    root@xyz # systemctl daemon-reload   # don't know if needed
    root@xyz # systemctl start autologin
    

    一旦它起作用,您可能需要启用它以自动启动或 systemd 所需的任何功能(不是专家)。

    root@xyz # systemctl enable autologin
    

答案2

我按照以下步骤操作:

sudo apt-get install --no-install-recommends xserver-xorg xserver-xorg-legacy xinit xterm

重要的是遗产包,因为在上一个版本中,如果没有它,下一个命令就无法工作:

sudo dpkg-reconfigure xserver-xorg-legacy

在控制台菜单中请选择任何人

之后,您可以通过 xinit 或启动无需root:

sudo su -l pi -c "xinit -geometry =800x400+0+0 -fn 8x13 -j -fg white -bg black /home/pi/go/bin/wego -- -nocursor" & -geometry =800x400+0+0 -fn 8x13 -j -fg white -bg black /home/youruser/bin/anyprogram -- -nocursor" &

启动

sudo su -l pi -c startx

相关内容