
Я использую Manjaro 17 с i3wm (если это имеет значение).
Я хочу запустить одну команду при запуске, чтобы исправить настройку нажатия на сенсорной панели. Я написал скрипт, который включает опцию /usr/bin/
и меняет ее режим на исполняемый.
/usr/bin/touchpad-enable-tap-click:
#!/bin/bash
exec xinput set-prop 11 290 1
Скрипт можно легко выполнить в терминале, не вызывая никаких проблем.
На основе своих исследований я подготовил простой файл сервиса в формате /etc/systemd/system/
.
/etc/systemd/system/touchpad-enable-tap-click.service:
[Unit]
Description=Allow touchpad tap click
[Service]
Type=oneshot
ExecStart=/usr/bin/touchpad-enable-tap-click
[Install]
WantedBy=multi-user.target
затем выполнил следующую команду перед перезагрузкой:
[sercan@compaq ~]$ sudo systemctl enable touchpad-enable-tap-click.service
Created symlink /etc/systemd/system/multi-user.target.wants/touchpad-enable-tap-click.service → /etc/systemd/system/touchpad-enable-tap-click.service.
Я также пробовал полный путь.
Сервис не работает, в результате:
статус systemctl
[sercan@compaq ~]$ systemctl status touchpad-enable-tap-click.service
● touchpad-enable-tap-click.service - Allow touchpad tap click
Loaded: loaded (/etc/systemd/system/touchpad-enable-tap-click.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Sat 2017-04-22 01:51:17 +03; 14min ago
Main PID: 32429 (code=exited, status=1/FAILURE)
Nis 22 01:51:17 compaq systemd[1]: Starting Allow touchpad tap click...
Nis 22 01:51:17 compaq bash[32429]: Unable to connect to X server
Nis 22 01:51:17 compaq systemd[1]: touchpad-enable-tap-click.service: Main process exited, code=exited, status=1/FAILURE
Nis 22 01:51:17 compaq systemd[1]: Failed to start Allow touchpad tap click.
Nis 22 01:51:17 compaq systemd[1]: touchpad-enable-tap-click.service: Unit entered failed state.
Nis 22 01:51:17 compaq systemd[1]: touchpad-enable-tap-click.service: Failed with result 'exit-code'.
журнал -xeпосле попытки перезапуска службы:
Nis 22 02:09:52 compaq sudo[21550]: sercan : TTY=pts/0 ; PWD=/home/sercan ; USER=root ; COMMAND=/usr/bin/systemctl restart touchpad-enable-tap-click.service
Nis 22 02:09:52 compaq sudo[21550]: pam_unix(sudo:session): session opened for user root by (uid=0)
Nis 22 02:09:52 compaq systemd[1]: Starting Allow touchpad tap click...
-- Subject: Unit touchpad-enable-tap-click.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit touchpad-enable-tap-click.service has begun starting up.
Nis 22 02:09:52 compaq bash[21553]: Unable to connect to X server
Nis 22 02:09:52 compaq systemd[1]: touchpad-enable-tap-click.service: Main process exited, code=exited, status=1/FAILURE
Nis 22 02:09:52 compaq systemd[1]: Failed to start Allow touchpad tap click.
-- Subject: Unit touchpad-enable-tap-click.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit touchpad-enable-tap-click.service has failed.
--
-- The result is failed.
Nis 22 02:09:52 compaq systemd[1]: touchpad-enable-tap-click.service: Unit entered failed state.
Nis 22 02:09:52 compaq systemd[1]: touchpad-enable-tap-click.service: Failed with result 'exit-code'.
Nis 22 02:09:52 compaq sudo[21550]: pam_unix(sudo:session): session closed for user root
Надеюсь, вы сможете мне помочь, я буду вам признателен.
решение1
GUI — это отдельная часть операционной системы, и машина может иметь несколько сред GUI. Ваши попытки с systemd не работают, потому что службы выполняются вне контекста GUI. Фактически, они выполняются до запуска GUI. Для запуска xinput
вам нужен GUI, который предоставляетсяX-сервер.
Приложения знают, что такое контекст GUI (т. е. с каким X-сервером взаимодействовать) через DISPLAY
переменную окружения. Это способ проверить, доступен ли GUI: если эта переменная не установлена, вы находитесь вне контекста GUI. (Установка переменной не создаст контекст GUI. Она может позволить вам подключиться к существующему контексту GUI извне, но это не имеет значения в данном случае.)
Если приглашение на вход в систему отображается в графическом режиме, то вы используетеДисплейный менеджер. Вы можете настроить менеджер отображения для запуска xinput
, и тогда настройки будут применены, как только отобразится приглашение на вход. Как это сделать, зависит от того, какой менеджер отображения вы используете; см.Как запустить скрипт, который запускается до экрана входа в систему?Больше подробностей.
Независимо от того, как вы входите в систему, вы можете применить настройки как часть своих сценариев входа. Если вы используете .xinitrc
или .xsession
для запуска сеанса GUI, добавьте туда команду. Если вы используете среду рабочего стола, в которой есть концепция запускаемых приложений, добавьте команду xinput
или скрипт, который ее запускает, в свои запускаемые приложения. Если вы используете менеджер окон напрямую, проверьте его документацию, чтобы узнать, как запустить команду при запуске (почти любой менеджер окон может это сделать).
Поскольку вы используете i3, вы можете запустить команду во время входа в GUI, указавexec
командав вашей ~/.i3/config
:
exec xinput set-prop 11 290 1
Хотя systemd запускает display manager как службу, я не думаю, что он предоставляет способ запустить команду в результирующем контексте GUI. Он может предоставить способ запустить команду при входе в систему, однако; см.Арка ВикиНапример.
решение2
Это происходит потому, что вы пытаетесь запустить команду, которая изменяет поведение системы X (GUI) до загрузки X. Поэтому вполне понятно, что он жалуется, что не может подключиться к серверу X. Подсказка — это имя команды, которую вы запускаете:Иксвход .
Конечно, я не могу гарантировать, что в ближайшем будущем systemd не разовьет возможность взаимодействия с сервером, который еще не запущен, но на данный момент это неподходящий инструмент для этой работы.
Первое, что нужно попробовать, это просто добавить эту (без ненужной exec
) команду в свой файл ~/.profile
(или, если вы используете ее bash
и она существует, в свой файл ~/.bash_profile
):
xinput set-prop 11 290 1
Однако, обратите внимание, что это заставит его жаловаться, если вы входите в систему не графически. Если это не сработает (см.здесьдля получения подробной информации), найдите способ добавить его в автозагрузку программ вашего окружения рабочего стола. Большинство популярных DE, таких как Gnome, Cinnamon, KDE, Unity и т. д., имеют инструменты GUI, которые позволяют загружать программы при входе в систему. Смотритездесьдля того, как это сделать в Openbox издесьдля LXDE. В качестве альтернативы см.здесьдля более глобального решения с использованием ~/config/autostart
.