Как запустить X как пользователь без полномочий root внутри rc.local?

1363
user145959

Я пытаюсь начать startxкак пользователь без полномочий root на моем Ubuntu-сервере 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пользователь, которым я не хочу быть!

0
... Почему бы просто не сказать DM для аутологина? Ignacio Vazquez-Abrams 6 лет назад 0
@ IgnacioVazquez-Abrams: потому что я не продвинутый пользователь, и я сделал то, что другие пользователи сказали мне здесь: https://unix.stackexchange.com/questions/403599/my-ubuntu-server-doesnt-execute-my-gtk -based-program-at-startup / 406384? noredirect = 1 # comment727290_406384 и здесь https://unix.stackexchange.com/questions/405618/how-to-change-autologin-from-root-to-non-root- пользователь user145959 6 лет назад 0

1 ответ на вопрос

1
Ivan

Версия диспетчера отображения (проще)

Обычно менеджер дисплеев должен показывать экран входа в систему и запускать сеанс пользователя. Если бы у вас был один, это был бы путь наименьшего сопротивления, чтобы настроить его на аутологин. Это широко используемое и, вероятно, хорошо протестированное и поддерживаемое решение. Вам нужно установить его на 1) autologin и 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 Server Edition, и вы будете устанавливать несколько пакетов, так что если вы хотите избежать их, потребуется более сложный ручной способ.

Способы настройки графического входа в систему на сервере 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, опираясь на предыдущую команду:

    а) Используйте что-то вроде:

    root@xyz # su -l myuser -c startx 

    введите команду, если вам нужно несколько аргументов:

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

    б) Вы можете пропустить этот шаг, если установите пользователя в системном блоке.

  4. Сделай автозапуск.

    a) Добавьте команду (3a) /etc/rc.localи перезагрузите компьютер.

    б) Используйте системный модуль, как вы описали, с командой, установленной в соответствии с 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