У меня есть специальная служба systemd (созданная с использованием этого руководства для изменения разрешения экрана до настраиваемого значения при запуске.
У меня проблемы с запуском службы (код = 203 / EXEC).
Для начала я безуспешно перепробовал все решения следующих существующих тем:
Исправление сбоя службы systemd 203 / EXEC (такого файла или каталога нет)
Сбой службы Systemd при запуске
Невозможно запустить Gunicorn в качестве службы в systemd 203 / EXEC
Мой файл .service такой:
[Unit]
Description=Set resolution to 1920x1080
[Service]
Type=oneshot
ExecStart=/usr/bin/fixres.sh
[Install]
WantedBy=multi-user.target
Мой сценарий выглядит следующим образом:
#!/bin/bash
xrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
xrandr --addmode Virtual1 "1920x1080_60.00"
xrandr --output Virtual1 --mode "1920x1080_60.00"
В выходных данных journalctl указывается, что служба «Сбой при выполнении шага EXEC /usr/bin/fixres.sh: разрешение отклонено». Тем не менее, у меня нет проблем с запуском сценария самостоятельно, просто bash /usr/bin/fixres.sh
.
Другие примечания: это в CentOS7, запущенном в VirtualBox
Может кто-нибудь найти ошибку, которую я сделал, или, возможно, дать мне несколько вариантов устранения неполадок?
Заранее спасибо.
Edit:
Я сделал разумную вещь и на самом деле погуглил свое сообщение об ошибке из journalctl, получив эту ссылку . После изменения разрешений моего скрипта на выполнение я получаю новую ошибку в journalctl, утверждающую, что скрипт не может открыть дисплей.
В настоящее время есть комментарий к вопросу, предлагающий именно это.
Если я запускаю xhost
, я получаю следующий вывод:
access control enabled, only authorized clients can connect
SI:localuser:root
SI:localuser:<username>
Я незнаком с этим аспектом, но похоже, что root имеет доступ к xhost.
Другой предложенный вариант - экспорт дисплея. Я не уверен, что это могло бы сделать. Я не пытаюсь получить доступ к дисплею из удаленной системы. Или это то, как Linux интерпретирует это?
Обновление:
Итак, добавление Environment=DISPLAY=:0
в файл модуля позволяет мне запускать службу из командной строки. Однако, это все еще терпит неудачу при загрузке. У меня такое чувство, что мне нужно ждать начала другой службы.
Я попытался добавить After=gdm.service
, но это также не удается. Есть ли другие службы, которые мне, возможно, придется подождать?