Embora eu não tenha encontrado uma maneira de passar o ambiente do udev para o systemd, é possível consultar o banco de dados do udev para as propriedades do ambiente. O comando udevadm info
tem os parâmetros --query
e --export
que permitem consultar apenas um propriedades do ambiente e imprimi-las em um formato que possa ser avaliado.
Eu usei uma combinação de variáveis de instância systemd e os comandos udevadm
para inicializar as variáveis de ambiente.
SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sr0", ACTION=="change", TAG+="systemd", ENV{SYSTEMD_WANTS}=="drive-change@%E{DEVNAME}.service"
Esta regra do udev executará o seguinte arquivo de serviço e transmitirá a variável DEVNAME
como uma variável de instância com o serviço.
[Unit]
Description=changes to dvd drive
[Service]
Type=oneshot
ExecStart=/usr/local/bin/script %I
[Install]
WantedBy=multi-user.target
Eu usei essa variável de instância para avaliar as propriedades do ambiente do elemento udev e resolvi meu problema.
#!/bin/sh
# Systemd passes the DEVNAME as the first parameter to the script
eval $(udevadm info --query=env --export $1)
# The rest of the script that depends on the udev environment
...