Как добавить репозиторий yum вручную?

У меня есть скрипт Python, который при запуске форкается и отвечает за запуск кучи других процессов.

Что указывает на то, что вы делаете это неправильно. Подробнее об этом чуть позже.

Когда скрипт завершается, дочерние процессы становятся сиротами и продолжают выполняться.

Это неправильное поведение деймона. Если "главный" процесс - в данном случае дочерний, который вы форкнули, поскольку вы указали Type=forking - завершается, systemd считает службу деактивированной и завершает все остальные все еще запущенные процессы (в группе управления), чтобы навести порядок.

Иногда переход от сценариев System 5 rc к systemd не является простым, потому что правильный способ выполнения действий в systemd совершенно другой. Правильный способ сделать (скажем) OpenVPN, или OpenStack, или OSSEC HIDS в systemd - это не то же самое, что сделать это с помощью rc скрипта. Тот факт, что у вас есть сценарий, который форкируется, затем порождает целую кучу внучатых процессов, а затем завершается, ожидая, что эти внучатые процессы продолжат работать, указывает на то, что вы совершаете тот же ужас, что и ossec-control, хотя и с двумя меньшими уровнями форков. Если вы обнаружили, что пишете "главный" скрипт, который проверяет флаги "разрешения" и запускает дочерние процессы для "разрешенных" частей вашей системы, то вы совершаете ту же ошибку, что и ужасный ossec-control.

В systemd нет необходимости в таких самодельных механизмах. Она уже является менеджером сервисов. Согласно https://unix.stackexchange.com/a/200365/5132, правильный путь к этому в systemd - не иметь одну службу, которая порождает некоторые странные и запутанные попытки иметь "подслужбы". Каждый дочерний процесс должен быть полноценной службой systemd. Тогда можно включать и выключать, запускать и останавливать различные части системы, используя обычные средства управления systemd. Как вы можете видеть на примере OSSEC HIDS, простой шаблонный сервисный блок покрывает почти все (исключение составляет https://askubuntu.com/a/624871/43344) службы, позволяя делать такие вещи, как systemctl enable ossec@agentlessd.service для включения дополнительной agentlessd службы, без какой-либо необходимости в ужасном механизме "главного сценария", который был необходим в System 5 rc.

Есть множество случаев, возможно, не таких экстремальных, как OSSEC HIDS, где такое переосмысление необходимо. MTS, такие как exim и sendmail - два таких случая. Можно было бы использовать один rc сценарий, который порождает бегущую очередь, деймона SMTP Submission и деймона SMTP Relay, с кучей специальных переменных оболочки в конфигурационном файле для управления тем, что именно запускается. Но правильный способ сделать это с помощью systemd - иметь три правильных сервисных блока (два из которых имеют связанные сокетные блоки) и никаких специальных вещей вообще, только обычные механизмы менеджера служб.

3
02.07.2018, 21:00
2 ответа

Через несколько минут после публикации вопроса я нашел ответ. Вот если кому понадобится (конфигурация для Mint 18/Ubuntu 16.04):

xinput set-int-prop "Kensington Kensington Slimblade Trackball" "Evdev Middle Button Emulation" 8 0
7 8 9 
xinput set-button-map "Kensington Kensington Slimblade Trackball" 1 8 2 4 5 6 7 3 2
xinput set-int-prop "Kensington Kensington Slimblade Trackball" "Evdev Wheel Emulation" 8 1
xinput set-int-prop "Kensington Kensington Slimblade Trackball" "Evdev Wheel Emulation Button" 8 8
xinput set-int-prop "Kensington Kensington Slimblade Trackball" "Evdev Wheel Emulation Axes" 8 6 7 4 5
xinput set-int-prop "Kensington Kensington Slimblade Trackball" "Evdev Wheel Emulation Timeout" 16 300

Редактировать

После обновления до Mint 19 (дома )и Ubuntu 18.04 (в офисе )я обнаружил, что описанная выше конфигурация не работает. 18.04 использует другую библиотеку для таких устройств (libinput ), и даже если я переустановил Evdev, некоторые опции не работают. После мучительных поисков я нашел решение. Создайте файл с расширением.conf в папке /usr/share/X11/xorg.conf.d/. В моем случае я назвал его 10-slimblade.conf. Поместите эту конфигурацию в файл:

Section "InputClass"
        Identifier "Kensington Kensington Slimblade Trackball"
        MatchProduct "Kensington Kensington Slimblade Trackball"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Driver "libinput"
        Option "ButtonMapping" "1 8 2 4 5 6 7 3 2"
        Option "ScrollButton" "8"
        Option "ScrollMethod" "button"
        Option "MiddleEmulation" "on"
EndSection

Перезапустить сеанс и все.

4
27.01.2020, 21:30

Большое спасибо! Просто чтобы добавить немного, я смог найти, как кнопки на трекболе:

---------
| 2 | 8 |
---------
| 1 | 3 |
---------

И это порядок, в котором они находятся в строке ButtonMapping:

LeftClick MiddleClick RightClick ScrollUp ScrollDown ? ? Back ?

Итак, для меня я просто хотел справа и слева в нижнем ряду, с задним верхним левым и средним верхним правым:

Section "InputClass"
    Identifier "Kensington Kensington Slimblade Trackball"
    MatchProduct "Kensington Kensington Slimblade Trackball"
    MatchIsPointer "on"
    MatchDevicePath "/dev/input/event*"
    Driver "libinput"
    Option "ButtonMapping" "1 8 3 4 5 6 7 2 9"
    Option "ScrollButton" "8"
    Option "ScrollMethod" "button"
EndSection

Документация здесь отсутствует -, так что это то, что я смог собрать воедино, запустив xev -event mouse.

2
29.01.2020, 04:49

Теги

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