Page 1 sur 1
[powermenu] Élevation de privilèges pour un script de powermenu. (résolu)
Publié : mar. 15 avr. 2025, 11:53
par terramotu
Bonjour,
J'ai fait un build archlinux avec wayland, sway, waybar, et wofi et je voulais faire un powermenu avec wofi.
Code : Tout sélectionner
#!/bin/bash
# Fichier: ~/.config/wofi/powermenu.sh
chosen=$(printf " Lock\n Poweroff\n Reboot\n Suspend\n Hibernate\n Logout" | wofi --dmenu --cache-file /dev/null --width 300 --height 300 --prompt "Power Menu")
case "$chosen" in
"Lock") bash ~/.config/sway/lockman.sh ;;
"Poweroff") systemctl poweroff ;;
"Reboot") systemctl reboot ;;
"Suspend") systemctl suspend ;;
"Hibernate") systemctl hibernate ;;
"Logout") swaymsg exit ;;
esac
Le soucis c'est que dans la plupart des options j'ai besoin d'élévation de privilèges et je ne sais pas trop comment m'y prendre.
Est-ce que je fais un SUID?
Est-ce que je met sudo dans le script?
Est-ce que j'exempte les commandes de devoir taper le mot de passe?
Est-ce que j'ai moyen de lancer avec privilèges élevés avec sway?
Est-ce que je sors polkit? (ça m'a l'air d'être la bonne solution mais je n'ai jamais fait et ça me fait un peu peur)
Dans tous les cas, je souhaiterai le truc avec le moins d'effet de bord possible.
Par exemple si je tape les commande même commande de mon script dans le terminal, je veux que le comportement soit normal, qu'il faille les droits root et le mot de passe.
Voilà voilà, je suis preneur de tips, de doc ou d'une solution clef en main.
Merci merci
Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)
Publié : mar. 15 avr. 2025, 12:19
par papajoke
bonjour
polkit ==>
run0
<== sudo
jamais fait
Code : Tout sélectionner
run0 ls -a /root
pkexec ls -a /root
# a voir `pkexec env` et `run0 env` , bien différents
Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)
Publié : mar. 15 avr. 2025, 13:46
par benjarobin
Bonjour, aucune des commandes données ne nécessite des droits root (si tu le fais depuis une session lancée correctement).
Par exemple,
systemctl reboot
lancé depuis un terminal sous KDE (vraiment pour l'exemple, avec une installation classique), ne nécessite pas de mot de passe.
Peux tu donner la sortie (avec ton utilisateur, surtout pas en root) de :
Code : Tout sélectionner
loginctl list-sessions
loginctl list-users
loginctl list-seats
Mais en effet tu as
pkexec
ou
run0
qui via un agent
Polkit peut te demander le mot de passe root
Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)
Publié : mar. 15 avr. 2025, 15:16
par terramotu
Bonjour merci pour la réponse effectivement dans mon shell je peux lancer ces commandes sans les droits sudo mais visiblement l'env de mon script et celui de mon shell sont un peu différents. Je ne sais pas trop debug plus, je doute maintenant de mon shebang. J'avoue que c'est un peu la détresse là.
Je te donne les outputs demandés
Code : Tout sélectionner
╭─terramotu@laptop-system2 ~
╰─$ loginctl list-sessions
SESSION UID USER SEAT LEADER CLASS TTY IDLE SINCE
2 1000 terramotu seat0 1388 user - no -
3 1000 terramotu - 1403 manager - no -
2 sessions listed.
╭─terramotu@laptop-system2 ~
╰─$ loginctl list-users
UID USER LINGER STATE
1000 terramotu no active
1 users listed.
╭─terramotu@laptop-system2 ~
╰─$ loginctl list-seats
SEAT
seat0
1 seats listed.
╭─terramotu@laptop-system2 ~
╰─$
Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)
Publié : mar. 15 avr. 2025, 15:20
par terramotu
Par ailleurs (french btw XD)
Pour le diff des environments ça donne ça: (c'est ce qui me fait douter mais je ne sais pas comment patcher mon script)
Code : Tout sélectionner
╭─terramotu@laptop-system2 ~
╰─$ diff env.txt env-wofi.txt
1,3c1,3
< ALACRITTY_LOG=/tmp/Alacritty-2210.log
< ALACRITTY_SOCKET=/run/user/1000/Alacritty-wayland-1-2210.sock
< ALACRITTY_WINDOW_ID=95582289572224
---
> SHELL=/usr/bin/bash
> LSCOLORS=Gxfxcxdxbxegedabagacad
> WINDOWID=95582289572224
5,6c5,8
< DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
< DEBUGINFOD_URLS=https://debuginfod.archlinux.org
---
> LESS=-R
> XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
> I3SOCK=/run/user/1000/sway-ipc.1000.1447.sock
> SSH_AUTH_SOCK=/tmp/ssh-XXXXXXUnWlh6/agent.2243
8,9c10,11
< DISPLAY=:0
< GDMSESSION=sway
---
> SSH_AGENT_PID=2244
> XCURSOR_SIZE=24
11,13c13,15
< HOME=/home/terramotu
< I3SOCK=/run/user/1000/sway-ipc.1000.1447.sock
< LANG=fr_FR.UTF-8
---
> XDG_SEAT=seat0
> PWD=/home/terramotu
> XDG_SESSION_DESKTOP=sway
15c17,19
< MAIL=/var/spool/mail/terramotu
---
> XDG_SESSION_TYPE=wayland
> _=/usr/bin/env
> XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/terramotu
17,20c21,23
< PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/var/lib/flatpak/exports/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
< PWD=/home/terramotu
< SHELL=/usr/bin/bash
< SHLVL=1
---
> HOME=/home/terramotu
> LANG=fr_FR.UTF-8
> LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.7z=01;31:*.ace=01;31:*.alz=01;31:*.apk=01;31:*.arc=01;31:*.arj=01;31:*.bz=01;31:*.bz2=01;31:*.cab=01;31:*.cpio=01;31:*.crate=01;31:*.deb=01;31:*.drpm=01;31:*.dwm=01;31:*.dz=01;31:*.ear=01;31:*.egg=01;31:*.esd=01;31:*.gz=01;31:*.jar=01;31:*.lha=01;31:*.lrz=01;31:*.lz=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.lzo=01;31:*.pyz=01;31:*.rar=01;31:*.rpm=01;31:*.rz=01;31:*.sar=01;31:*.swm=01;31:*.t7z=01;31:*.tar=01;31:*.taz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tgz=01;31:*.tlz=01;31:*.txz=01;31:*.tz=01;31:*.tzo=01;31:*.tzst=01;31:*.udeb=01;31:*.war=01;31:*.whl=01;31:*.wim=01;31:*.xz=01;31:*.z=01;31:*.zip=01;31:*.zoo=01;31:*.zst=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.jxl=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:
22,23d24
< TERM=xterm-256color
< USER=terramotu
25,30d25
< WINDOWID=95582289572224
< XCURSOR_SIZE=24
< XDG_DATA_DIRS=/home/terramotu/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
< XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/terramotu
< XDG_RUNTIME_DIR=/run/user/1000
< XDG_SEAT=seat0
31a27
> ALACRITTY_SOCKET=/run/user/1000/Alacritty-wayland-1-2210.sock
33,39c29
< XDG_SESSION_DESKTOP=sway
< XDG_SESSION_ID=2
< XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
< XDG_SESSION_TYPE=wayland
< XDG_VTNR=8
< _=/usr/bin/env
< OLDPWD=/home/terramotu
---
> TERM=xterm-256color
40a31,33
> USER=terramotu
> DISPLAY=:0
> SHLVL=2
42,46c35,46
< LESS=-R
< LSCOLORS=Gxfxcxdxbxegedabagacad
< LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.7z=01;31:*.ace=01;31:*.alz=01;31:*.apk=01;31:*.arc=01;31:*.arj=01;31:*.bz=01;31:*.bz2=01;31:*.cab=01;31:*.cpio=01;31:*.crate=01;31:*.deb=01;31:*.drpm=01;31:*.dwm=01;31:*.dz=01;31:*.ear=01;31:*.egg=01;31:*.esd=01;31:*.gz=01;31:*.jar=01;31:*.lha=01;31:*.lrz=01;31:*.lz=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.lzo=01;31:*.pyz=01;31:*.rar=01;31:*.rpm=01;31:*.rz=01;31:*.sar=01;31:*.swm=01;31:*.t7z=01;31:*.tar=01;31:*.taz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tgz=01;31:*.tlz=01;31:*.txz=01;31:*.tz=01;31:*.tzo=01;31:*.tzst=01;31:*.udeb=01;31:*.war=01;31:*.whl=01;31:*.wim=01;31:*.xz=01;31:*.z=01;31:*.zip=01;31:*.zoo=01;31:*.zst=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.jxl=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:
< SSH_AUTH_SOCK=/tmp/ssh-XXXXXXUnWlh6/agent.2243
< SSH_AGENT_PID=2244
---
> XDG_VTNR=8
> XDG_SESSION_ID=2
> XDG_RUNTIME_DIR=/run/user/1000
> DEBUGINFOD_URLS=https://debuginfod.archlinux.org
> XDG_DATA_DIRS=/home/terramotu/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
> PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/var/lib/flatpak/exports/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
> ALACRITTY_LOG=/tmp/Alacritty-2210.log
> GDMSESSION=sway
> DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
> MAIL=/var/spool/mail/terramotu
> ALACRITTY_WINDOW_ID=95582289572224
> OLDPWD=/home/terramotu
Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)
Publié : mar. 15 avr. 2025, 15:37
par benjarobin
Mais comment est lancé ce script bash ? Car si tu l’exécute depuis ton shell, tu ne devrais pas avoir de problème (et avoir les mêmes variables d'environnement)
Note: Après analyse, c'est exactement les mêmes (sauf pour SHLVL ce qui n'est pas étonnant), tu n'aurais pas dû faire un diff comme cela, en effet il faut faire un sort avant.
Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)
Publié : mar. 15 avr. 2025, 16:58
par terramotu
Ce powermenu est lancé par un keybindings que j'ai défini dans sway.
Code : Tout sélectionner
### Set the keybinding for the powermenu
set $powermenu exec bash ~/.config/wofi/powermenu.sh
bindsym Mod4+Shift+m exec $powermenu
Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)
Publié : mar. 15 avr. 2025, 17:08
par benjarobin
Peux tu vérifier que si celui-ci est lancé manuellement depuis ton shell, tu peux lancer un reboot (ou autre) sans être root ?
Sinon tu devrait rendre exécutable ton ~/.config/wofi/powermenu.sh
via chmod +x
Puis simplement avoir : bindsym Mod4+Shift+m exec /home/terramotu/.config/wofi/powermenu.sh
Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)
Publié : mar. 15 avr. 2025, 17:50
par terramotu
Nan si je le lance depuis mon shell je ne peux pas lancer de reboot non plus.
Avec l'éxécution du script en command line ça ne passe pas je ne peux pas reboot ou shutdown. (j'avais déjà fais le chmod +x)
Mais c'est définitivement pas un soucis de droits, je ne peux pas locker non plus.
J'espère que ce n'est pas juste mon script qui est faux...
Code : Tout sélectionner
╭─terramotu@laptop-system2 ~
╰─$ ./.config/wofi/powermenu.sh
(wofi:2502): Gtk-WARNING **: 17:43:21.058: Theme parsing error: <data>:10:10: expected ':'
╭─terramotu@laptop-system2 ~
╰─$ bash ~/.config/wofi/powermenu.sh
(wofi:2534): Gtk-WARNING **: 17:43:36.186: Theme parsing error: <data>:10:10: expected ':'
Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)
Publié : mar. 15 avr. 2025, 19:18
par benjarobin
Hum, cela ressemble à une erreur de ton script.
Affiche le contenu de la variable chosen, pour cela ajoute
Edit : Après un test rapide, c'est l'espace avant qui pose problème.
Une solution est de faire (par exemple) :
Code : Tout sélectionner
chosen=$(printf " Lock\n Poweroff\n Reboot\n Suspend\n Hibernate\n Logout" | wofi --dmenu --cache-file /dev/null --width 300 --height 300 --prompt "Power Menu" | xargs echo -n)
Une autre solution (à la place de
| xargs echo -n
) est d'utiliser
| tr -d '[:space:]'
Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)
Publié : mar. 15 avr. 2025, 20:46
par terramotu
Merci énormément, c'était mon script et les espaces dans le printf.
La version finale:
Code : Tout sélectionner
#!/bin/bash
chosen=$(printf "Lock\nPoweroff\nReboot\nSuspend\nHibernate\nLogout" | \
wofi --dmenu --cache-file /dev/null --width 300 --height 300 --prompt "Power Menu" | \
xargs echo -n)
case "$chosen" in
"Lock") bash ~/.config/sway/lockman.sh ;;
"Poweroff") systemctl poweroff ;;
"Reboot") systemctl reboot ;;
"Suspend") systemctl suspend ;;
"Hibernate") systemctl hibernate ;;
"Logout") swaymsg exit ;;
*) echo "Action inconnue ou rien sélectionné." ;;
esac
Décidément je dois continuer d'apprendre bash un grand merci !