Невозможно запустить приложение, которое зависит от X в качестве службы systemd

grep -e '^$' -e '^[.]$' -e '[.].*[.]' -e '[^0-9.]' yourfile

Здесь мы постепенно фильтруем характер строк, которые мы хотим сохранить:

a) thoroughly empty lines,
b) lines that are exactly a dot,
c) lines that comprise at least 2 dots,
d) finally, lines that have at least 1 nondigit &/or 1 dot. (Note: a solitary dot
   has already been filtered out by step-b) earlier.)
5
22.04.2017, 15:38
2 ответа

Графический пользовательский интерфейс — это отдельная часть операционной системы, и машина может иметь несколько графических сред. Ваши попытки с systemd не работают, потому что службы выполняются вне контекста графического интерфейса. На самом деле они выполняются до запуска графического интерфейса. Чтобы запустить xinput, вам нужен графический интерфейс, который предоставляется X-сервером .

Приложения знают, что такое контекст GUI (, т. е. с каким X-сервером следует связываться )через переменную среды DISPLAY. Это способ проверить, доступен ли графический интерфейс :, если эта переменная не установлена, вы находитесь вне контекста графического интерфейса. (Установка переменной не приведет к созданию контекста графического интерфейса. Это может позволить вам подключиться к существующему контексту графического интерфейса извне, но здесь это не имеет значения.)

Если приглашение для входа отображается в графическом режиме, значит, вы используете диспетчер отображения . Вы можете настроить дисплейный менеджер для запуска xinput, и тогда настройки будут применены, как только отобразится запрос на вход в систему. Как это сделать, зависит от того, какой диспетчер отображения вы используете; см. Как я могу запустить сценарий, который запускается перед экраном входа в систему? для более подробной информации.

Независимо от того, как вы входите в систему, вы можете применить настройки как часть ваших сценариев входа. Если вы используете .xinitrcили .xsessionдля запуска сеанса графического интерфейса, добавьте туда команду. Если вы используете среду рабочего стола с концепцией запуска приложений, добавьте команду xinput,или сценарий, который запускает его, в ваши приложения запуска. Если вы используете оконный менеджер напрямую, проверьте его документацию, чтобы узнать, как запускать команду при запуске (почти любой оконный менеджер может это сделать ).

Поскольку вы используете i3, вы можете запустить команду во время входа в графический интерфейс, поместивexecкоманду в свой~/.i3/config:

exec xinput set-prop 11 290 1

Несмотря на то, что systemd запускает диспетчер отображения как службу, я не думаю, что он обеспечивает способ запуска команды в результирующем контексте графического интерфейса. Однако это может предоставить способ запуска команды при входе в систему; см. Arch Wiki для примеров.

4
27.01.2020, 20:38

Это происходит потому, что вы пытаетесь выполнить команду, которая изменяет поведение системы X (графический интерфейс пользователя) до того, как X загрузится. Поэтому, что вполне понятно, он жалуется, что не может подключиться к X-серверу. Подсказкой является имя выполняемой команды: xinput .

Теперь я не могу гарантировать, что systemd в ближайшем будущем не разработает возможность взаимодействия с сервером, который еще не запущен, но на данный момент это не тот инструмент, который нужен для работы.

Первое, что можно попробовать, это просто добавить эту команду (без ненужного exec) в ваш ~/.profile (или, если вы используете bash и он существует, в ваш ~/.bash_profile):

xinput set-prop 11 290 1

Заметьте, однако, что это заставит его жаловаться, если вы входите в систему неграфически. Если это не сработает (см. здесь для подробностей), найдите способ добавить его в программы запуска среды рабочего стола. Большинство популярных DE, таких как Gnome, Cinnamon, KDE, Unity и т.д., имеют инструменты графического интерфейса, позволяющие загружать программы при входе в систему. Смотрите здесь о том, как это сделать в openbox и здесь для LXDE. Альтернативно, смотрите здесь для более глобального решения, используя ~/config/autostart.

3
27.01.2020, 20:38

Теги

Похожие вопросы