Команда для запуска с правами root при загрузке не работает

Мне нужно выполнить следующую команду sudo xhost SI:localuser:root каждый раз, когда я запускаю свою машину. Поэтому я хотел бы автоматизировать этот процесс. Я использую Ubuntu 12.04 LTS для этого.

Я попытался поместить эту команду в мой файл /etc/rc.local но это не работает, потому что, когда я бегу xhost должно появиться:

SI:localuser:<myUser>
SI:localuser:root

Файл /etc/rc.local является следующим:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

xhost SI:localuser:root

exit 0

Я что-то пропустил?

* PS: как предложено в комментариях ** То, что я связываю, описано здесь по этому вопросу. Могу ли я сделать это лучше?

2 ответа

Решение

Как правильно заметил @grawity, это не сработает. Если вы действительно хотите сделать это (что кажется довольно плохой идеей), создайте ~/.xinitrc файл с этими строками:

#!/usr/bin/env bash
xhost SI:localuser:root

xhost команду не нужно запускать как root так как вы являетесь владельцем X сессии. Сейчас, xinitrc довольно старый, и я не уверен, что он будет прочитан в современных средах рабочего стола. Вероятно, вы могли бы достичь того же, изменив свойства сеанса GNOME.

Как правило, включение корневого доступа к вашему X-серверу не очень хорошая идея. В любое время, когда вам нужен root для запуска графической программы, вы можете отключить контроль доступа:

xhost + 
sudo gedit
xhost -

Я уверен, что вам не нужно делать это на большинстве современных систем. Что именно ты пытаешься сделать? Программы, запускаемые с sudo в любом случае должен иметь доступ к вашему X-серверу.

Это не сработает, потому что:

  1. rc.local запускается до запуска сервера X11.

  2. rc.local не знает, где находится сервер X11. Другими словами, он не знает правильное значение для $DISPLAY.

    Всегда помните, что может быть несколько серверов X11 - Ubuntu поддерживает "быстрое переключение пользователей", поэтому у вас может быть один экземпляр Xorg для себя, а второй - для экрана входа в систему.

  3. rc.local не имеет доступа ни к одному из работающих в настоящее время серверов X11.

    Подумайте об этом: если вам нужно дать доступ к root с помощью xhost, это означает, что root еще не имеет доступа. И rc.local работает как root.

Все три пункта также относятся к cronjobs, правилам udev и большинству других вещей.

Другие вопросы по тегам