[powermenu] Élevation de privilèges pour un script de powermenu. (résolu)

Questions et astuces concernant l'installation et la configuration d'archlinux
Répondre
terramotu
Hankyu
Messages : 10
Inscription : mer. 24 mai 2023, 21:08

[powermenu] Élevation de privilèges pour un script de powermenu. (résolu)

Message 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
Avatar de l’utilisateur
papajoke
Elfe
Messages : 804
Inscription : sam. 30 août 2014, 19:54

Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)

Message 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
Arch stable - Kde 6 / fish - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17509
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)

Message 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
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
terramotu
Hankyu
Messages : 10
Inscription : mer. 24 mai 2023, 21:08

Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)

Message 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 ~
╰─$
terramotu
Hankyu
Messages : 10
Inscription : mer. 24 mai 2023, 21:08

Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)

Message 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
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17509
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)

Message 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.
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
terramotu
Hankyu
Messages : 10
Inscription : mer. 24 mai 2023, 21:08

Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)

Message 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
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17509
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)

Message 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
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
terramotu
Hankyu
Messages : 10
Inscription : mer. 24 mai 2023, 21:08

Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)

Message 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 ':'
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17509
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)

Message par benjarobin »

Hum, cela ressemble à une erreur de ton script.
Affiche le contenu de la variable chosen, pour cela ajoute

Code : Tout sélectionner

echo "$chosen"
echo -n "$chosen" | hexdump -C
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:]'
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
terramotu
Hankyu
Messages : 10
Inscription : mer. 24 mai 2023, 21:08

Re: [powermenu] Élevation de privilèges pour un script de powermenu. (non fonctionnel)

Message 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 !
Répondre