Решением для вас было бы просто использовать gnomesu
вместо sudo
. Как написано здесь,
это обычная проблема безопасности. У вас есть многопользовательская система, в которой многие пользователи могут войти в систему, локально или удаленно, в сеансе графического интерфейса. Что, если другие вошедшие в систему люди смогут открывать окна на вашем рабочем столе без вашего разрешения? По крайней мере, неудобно, но также можно было бы создать окно, в котором можно было бы прочитать все, что вы печатаете на клавиатуре, включая ваши банковские счета. Таким образом, необходимо учитывать
xhost
.
Есть несколько способов добиться этого, однако это самый простой способ, поэтому я предлагаю вам сделать это. Если вы все равно хотите использовать обычный sudo (не знаю по какой причине), вы можете внести изменения, указанные в этомвопросе.
Попробуйте запустить
xhost +localhost
в своем терминале, а затем запустите снова судо. Это позволяет всем пользователям вашей системы (т.е. root) открывать окна на вашем экране. Обязательно используйте+localhost
, а не просто+
, поскольку более безопасно разрешать подключения только с локального хоста, чем с в любом месте.Чтобы сделать это постоянным, отредактируйте файл ~/.xinitrc следующим образом:
Запустите
gedit ~/.xinitrc
Отредактируйте файл, чтобы он выглядел следующим образом (в начале он должен быть пустым):
#!/bin/bash
xhost +localhost &
Теперь сохраните файл, выйдите из системы и снова войдите в систему. Теперь все должно работать нормально с sudo.
Для параметра истечения срока в утилите useradd
требуется дата, указанная в формате ГГГГ-ММ-ДД
.
Вы можете вычислить эту дату, используя параметр -d
для команды date
. Используя пример вашего 5-месячного сценария:
$ date +"%Y-%m-%d"
2017-04-08
$ date -d "5 months" +"%Y-%m-%d"
2017-09-08
Ключ -e
в useradd
ожидает дату в международном формате даты ( YYYY-MM-DD
), как можно найти на его странице руководства. :
-e, --expiredate EXPIRE_DATE
The date on which the user account will be disabled. The date is
specified in the format YYYY-MM-DD.
[...]
Теперь вам просто нужно указать дату истечения срока действия учетной записи. Вы можете сделать этот расчет в PHP. Ответ, на который вы связались, делает это с помощью стандартного инструмента командной строки, поэтому язык высокого уровня использовать не нужно.
Вот пример кода, как это сделать в PHP:
$diffHour = 0;
$diffMinute = 0;
$diffSecond = 0;
$diffMonth = 10;
$diffDay = 0;
$diffYear = 0;
$hour = date("H") + $diffHour;
$minute = date("i") + $diffMinute;
$second = date("s") + $diffSecond;
$month = date("n") + $diffMonth;
$day = date("j") + $diffDay;
$year = date("Y") + $diffYear;
$time = mktime($hour, $minute, $second, $month, $day, $year);
$date = date("Y-m-d", $time);
Просто введите переменные в самый верхний блок. Я заполнил их для вашего примера за 10 месяцев. Вы тоже можете вернуться в прошлое. Например, если вы хотите, чтобы срок его действия истек через 7 месяцев минус 4 дня, вы можете установить $ diffMonth = 7;
и $ diffDay = -4;
.
Затем передайте значение даты ( 2018-02-09
при запуске сегодня (за исключением случаев, когда вы живете в Америке, тогда это день раньше, потому что мы все еще используем отложенную систему времени с часовыми поясами. )) в ваш сценарий bash.
Пример bash-кода:
useradd -e "2018-02-09" "rizal"