Posso passar o atual usuário x display como um parâmetro em uma regra do udev?

0

Eu tenho uma regra do udev configurada que reinicia um serviço systemd, passando um parâmetro de usuário para o serviço ser executado como.

O problema é que o udev é executado como root, então ele sempre passa na raiz como o parâmetro. Eu gostaria de de alguma forma obter o usuário que possui DISPLAY 0 e passar isso como o parâmetro.

Pouco de fundo: Estou tentando conseguir a montagem automática de unidades USB e mídia ótica com o udevil, sob qualquer usuário e sem o auxílio de um ambiente de área de trabalho.

Isso é possível?

Esta é a minha regra atual:

# check for blockdevices, /dev/sd*, /dev/sr* and /dev/mmc*
SUBSYSTEM!="block", KERNEL!="sd*|sr*|mmc*", GOTO="exit"

# check for special partitions we dont want mount
IMPORT{builtin}="blkid"
ENV{ID_FS_LABEL}=="EFI|BOOT|Recovery", GOTO="exit"

# /dev/sd* and /dev/mmc* ith partitions/disk and filesystems only and /dev/sr* disks only
KERNEL=="sd*|mmc*", ENV{DEVTYPE}=="partition|disk", ENV{ID_FS_USAGE}=="filesystem", GOTO="harddisk"
KERNEL=="sr*", ENV{DEVTYPE}=="disk", GOTO="optical"
GOTO="exit"

# mount or umount for hdds
LABEL="harddisk"
ACTION=="add", RUN+="/usr/bin/systemctl restart udevil-mount@/dev/%k.service"
ACTION=="remove", RUN+="/usr/bin/systemctl stop udevil-mount@/dev/%k.service"
GOTO="exit"

# mount or umount for opticals
LABEL="optical"
ACTION=="add|change", RUN+="/usr/bin/systemctl restart udevil-mount@/dev/%k.service"
GOTO="exit"

# Exit
LABEL="exit"
    
por dcrdev 08.10.2015 / 13:37

1 resposta

0

Não, não há um bom método para isso.

No Unix, não há nenhum usuário "atual" nem exibição atual, nem qualquer garantia de exibição: 0 existiria e pertenceria a um usuário real a qualquer momento. Até mesmo a Microsoft aprendeu anos atrás que deixar os serviços entrarem "em" uma sessão de usuário é uma má ideia (resultando em "isolamento de sessão 0").

Execute o daemon devmon (ou udiskie como alternativa, ou talvez thunar-volman), a partir da sessão gráfica do usuário (por exemplo, inicie via / etc / xdg / autostart ou / etc / X11 / xinitrc. d). Deixe monitorar os eventos do udev dessa maneira.

    
por 08.10.2015 / 15:38