Como eu uso ENV {SYSTEMD_USER_WANTS} = na regra do udev?

2

Desejo configurar um docked.target no meu sistema de nível de usuário. A ideia é executar alguns serviços para configurar meus displays externos.

Atualmente tenho isso como minha regra:

SUBSYSTEM=="usb", ACTION=="add", ENV{ID_VENDOR}=="17ef", ENV{ID_MODEL}=="100a", SYMLINK+="tp_mini_dock", TAG+="systemd", ENV{SYSTEMD_USER_WANTS}="docked.target"

A regra é detectada muito bem (consigo ver dev-tp_mini_dock.device quando estou ancorado).

Eu tenho isso em ~/.config/systemd/user/docked.target (também tentei /etc/systemd/user sem sorte):

[Unit]
Description=Docked to ThinkPad Mini Dock
BindTo=dev-tp_mini_dock.device

Mas isso não começa quando eu entro. No entanto, se eu iniciar manualmente docked.target enquanto estiver encaixado, ele será interrompido como esperado quando eu desacoplar.

No entanto, se eu usar ENV{SYSTEMD_WANTS}="docked.target" e colocar o arquivo em /etc/systemd/system/docked.target , o destino começará como esperado quando eu acoplar. O problema, então, é que minha instância no nível do usuário não conhece os serviços / destinos no nível do sistema.

Alguma ideia? Eu vi algumas outras perguntas na net, e uma quase exatamente como a minha: link

    
por aiguofer 29.01.2016 / 23:30

2 respostas

1

Você pode tentar substituir SYSTEMD_USER_WANTS por MANAGER_USER_WANTS . Não tenho 100% de certeza sobre essa mudança de nome, mas pelo menos em systemd-226 não há mais menção a SYSTEMD_USER_WANTS nas fontes e ela parece ser substituída por MANAGER_USER_WANTS . Pelo menos funcionou para mim para o caso similar.

    
por 05.04.2016 / 14:47
0

Embora eu ainda não saiba como ENV{SYSTEMD_USER_WANTS} funciona, consegui resolver meu problema específico depois de ler este blog .

Acontece que posso instalar alvos como uma dependência em dispositivos. Eu mudei meu arquivo de unidade ~/.config/systemd/user/docked.target para:

[Unit]
Description=Docked to ThinkPad Mini Dock
BindsTo=dev-tp_mini_dock.device
After=dev-tp_mini_dock.device

[Install]
WantedBy=dev-tp_mini_dock.device

e minha regra do udev para:

SUBSYSTEM=="usb", ACTION=="add", ENV{ID_VENDOR}=="17ef", ENV{ID_MODEL}=="100a", SYMLINK+="tp_mini_dock", TAG+="systemd"

e, em seguida, ative-o com systemctl --user enable docked.target .

Agora, quando eu o conecto, a regra do udev cria o dispositivo systemd, que, por sua vez, inicia o destino. Em seguida, a opção BindsTo garante que, quando o dispositivo desaparecer (desconectado), o destino seja interrompido.

Eu tive que fazer algumas mágicas sem sentido para fazer isso funcionar quando eu faço o login com o dock já conectado. Alguém poderia imaginar que simplesmente adicionando default.target a WantedBy e After seria o suficiente ... eu Vou adicionar um link para um blog depois de escrevê-lo.

    
por 01.02.2016 / 01:42