[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Re : Re: Problème avec pulseaudio



On 2021-06-24 08:55:25 +0000, Hugues Larrive wrote:
> Le mercredi 23 juin 2021 à 06:39, Haricophile <haricophile@aranha.fr> a écrit :
> Chez moi il semble être lancé par systemd lors de l'exécution des tâches cron.daily, et plus particulièrement du script /etc/cron.daily/locate qui contient :
> # run find as this user
> LOCALUSER="nobody"
> Ça lance le script /usr/bin/updatedb.findutils qui fait un `su nobody` ... ce qui provoque :
> Jun 23 06:55:12 pbp systemd[1]: Created slice User Slice of UID 65534.
> Jun 23 06:55:12 pbp systemd[1]: Starting User Runtime Directory /run/user/65534...
> Jun 23 06:55:12 pbp systemd[1]: Finished User Runtime Directory /run/user/65534.
> Jun 23 06:55:12 pbp systemd[1]: Starting User Manager for UID 65534...
> et une tentative de lancement de pulseaudio.service pour cet utilisateur.

C'est parce qu'avec systemd et son utilisation des CGroup, il ne
faut pas utiliser "su" dans un fichier crontab.

Si je comprends bien, le problème est que le service cron est dans
le system.slice, et que le su va alors créer un user.slice pour
l'utilisateur en question (ici, nobody). Et c'est ça qui va activer
divers trucs, dont une tentative de lancement de pulseaudio.

Par exemple, si j'ajoute un fichier dans /etc/cron.d avec une
ligne du genre

40 * * * * root su nobody -c true

alors quand la commande est lancée, j'obtiens:

Jun 24 15:40:01 zira CRON[186136]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Jun 24 15:40:01 zira CRON[186137]: (root) CMD (su nobody -c true)
Jun 24 15:40:01 zira systemd[1]: Created slice User Slice of UID 65534.
Jun 24 15:40:01 zira su[186138]: (to nobody) root on none
Jun 24 15:40:01 zira systemd[1]: Starting User Runtime Directory /run/user/65534...
Jun 24 15:40:01 zira su[186138]: pam_unix(su:session): session opened for user nobody(uid=65534) by (uid=0)
Jun 24 15:40:01 zira systemd[1]: Finished User Runtime Directory /run/user/65534.
Jun 24 15:40:01 zira systemd[186140]: pam_unix(systemd-user:session): session opened for user nobody(uid=65534) by (uid=0)
Jun 24 15:40:01 zira systemd[1]: Starting User Manager for UID 65534...
[...]
Jun 24 15:40:01 zira systemd[186140]: Starting Sound Service...
Jun 24 15:40:01 zira nologin[186163]: Attempted login by root (UID: 65534) on UNKNOWN
Jun 24 15:40:01 zira su[186138]: pam_unix(su:session): session closed for user nobody
Jun 24 15:40:01 zira pipewire[186161]: could not set nice-level to -11: Permission denied
Jun 24 15:40:01 zira rtkit-daemon[730]: Supervising 5 threads of 1 processes of 2 users.
Jun 24 15:40:01 zira rtkit-daemon[730]: Supervising 5 threads of 1 processes of 2 users.
Jun 24 15:40:01 zira systemd[186140]: Started D-Bus User Message Bus.
Jun 24 15:40:01 zira pipewire[186161]: could not make thread realtime: Permission denied
Jun 24 15:40:01 zira systemd[1]: session-799.scope: Succeeded.
Jun 24 15:40:01 zira pipewire[186161]: Failed to receive portal pid: org.freedesktop.DBus.Error.NameHasNoOwner: Could not get PID of name 'org.freedesktop.portal.Desktop': no such name
Jun 24 15:40:01 zira pipewire-media-session[186168]: could not set nice-level to -11: Permission denied
Jun 24 15:40:01 zira rtkit-daemon[730]: Supervising 5 threads of 1 processes of 2 users.
Jun 24 15:40:01 zira rtkit-daemon[730]: Supervising 5 threads of 1 processes of 2 users.
Jun 24 15:40:01 zira pipewire-media-session[186168]: could not make thread realtime: Permission denied
Jun 24 15:40:01 zira CRON[186136]: pam_unix(cron:session): session closed for user root
Jun 24 15:40:01 zira pulseaudio[186162]: Failed to create secure directory (/nonexistent/.config/pulse): No such file or directory
Jun 24 15:40:01 zira postfix/pickup[183192]: A54ACC23C25: uid=0 from=<root>
Jun 24 15:40:01 zira systemd[186140]: pulseaudio.service: Main process exited, code=exited, status=1/FAILURE
Jun 24 15:40:01 zira systemd[186140]: pulseaudio.service: Failed with result 'exit-code'.
Jun 24 15:40:01 zira systemd[186140]: Failed to start Sound Service.
[...]
Jun 24 15:40:01 zira systemd[186140]: pulseaudio.service: Scheduled restart job, restart counter is at 1.
Jun 24 15:40:01 zira systemd[186140]: Stopped Sound Service.
Jun 24 15:40:01 zira systemd[186140]: Starting Sound Service...
Jun 24 15:40:01 zira pulseaudio[186178]: Failed to create secure directory (/nonexistent/.config/pulse): No such file or directory
Jun 24 15:40:01 zira systemd[186140]: pulseaudio.service: Main process exited, code=exited, status=1/FAILURE
Jun 24 15:40:01 zira systemd[186140]: pulseaudio.service: Failed with result 'exit-code'.
Jun 24 15:40:01 zira systemd[186140]: Failed to start Sound Service.
Jun 24 15:40:02 zira systemd[186140]: pulseaudio.service: Scheduled restart job, restart counter is at 2.
Jun 24 15:40:02 zira systemd[186140]: Stopped Sound Service.
Jun 24 15:40:02 zira systemd[186140]: Starting Sound Service...
Jun 24 15:40:02 zira pulseaudio[186179]: Failed to create secure directory (/nonexistent/.config/pulse): No such file or directory
Jun 24 15:40:02 zira systemd[186140]: pulseaudio.service: Main process exited, code=exited, status=1/FAILURE
Jun 24 15:40:02 zira systemd[186140]: pulseaudio.service: Failed with result 'exit-code'.
Jun 24 15:40:02 zira systemd[186140]: Failed to start Sound Service.
Jun 24 15:40:02 zira systemd[186140]: pulseaudio.service: Scheduled restart job, restart counter is at 3.
Jun 24 15:40:02 zira systemd[186140]: Stopped Sound Service.
[...]

Je ne sais pas si ça vient aussi de la config de pam...

> Pour l'UID 1000 pulseaudio se lance normalement.
> 
> Pour l'UID 0 ça donne :
> Jun 23 07:09:28 pbp systemd[1951]: Condition check resulted in Sound System being skipped.
> 
> C'est dû à une ligne dans /usr/lib/systemd/user/pulseaudio.service :
> ConditionUser=!root
> 
> On peut obtenir la même chose pour nobody en ajoutant :
> ConditionUser=!nobody
> juste en dessous.

Sauf que ça va juste régler le problème avec pulseaudio, et pas
les autres erreurs éventuelles dues à l'utilisation du "su".

> Préalablement, pour éviter que ce soit écrasé par une mise à jour de pulseaudio :
> # dpkg-divert --rename /usr/lib/systemd/user/pulseaudio.service
> # cp /usr/lib/systemd/user/pulseaudio.service.distrib /usr/lib/systemd/user/pulseaudio.service

Il est probablement préférable de remplacer le lien symbolique

/etc/systemd/user/default.target.wants/pulseaudio.service -> /usr/lib/systemd/user/pulseaudio.service

par un fichier avec la config voulue (je n'ai pas testé).

> Après je ne sais pas trop à qui attribuer ce bug, est-ce que pulseaudio devrait intégrer une condition pour nobody comme pour root ? est-ce que systemd ne devrait pas lancer de "User Manager" pour nobody ? est-ce que c'est le script updatedb.findutils qui fait quelque chose d'incorrect ?

Comme il peut aussi y avoir des problèmes avec d'autres utilisateurs
que nobody, je dirais que c'est surtout le "su" à éviter. Désactiver
les trucs pour nobody pourrait toujours être utile, mais ne réglerait
pas le problème général.

Peut-être que le fonctionnement du "su" pourrait être corrigé?
Au passage, "sudo" n'est-il maintenant pas recommendé à la place
de "su"? Et règle-t-il ce problème? (Pas testé...)

> Maintenant que j'ai identifié /etc/cron.daily/locate comme source du
> problème, je me suis aperçu que locate n'est pas installé sur ma
> buster, c'est mlocate à la place...
> 
> Du coup ma solution finale :
> # apt-get install mlocate locate-

C'est ce que j'utilise depuis plusieurs années (avant, c'était
slocate, je crois).

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


Reply to: