A pergunta feita pelo K.Chen é: por que eu preciso de privilégios sudo quando faço isso na CLI, mas não preciso de tais privilégios quando faço isso na GUI.
A primeira parte da resposta é que as pessoas que projetam ambientes de desktop, como Gnome, KDE, Xfce, Mate, Cinnamon, ... tentam simplificar o trabalho de seus usuários, e configuram o desligamento e a reinicialização sem exigir credenciais do sudo. Isso, aliás, implica que deve haver uma sequência de desligamento que não envolva o desligamento do programa, o que exige privilégios de sudo (não há maneira de contornar isso).
Não sei em detalhes como cada DE faz isso, mas sei que há uma maneira suave de desativar, ou reiniciar / desligar / hibernar o sistema, o que não requer privilégios de root. Você pode encontrar a postagem original em uma postagem do Arch Linux Forum . Em essência, isso equivale a emitir estes comandos:
parar
#!/bin/bash
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
reiniciar
#!/bin/bash
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
dbus-suspend
#!/bin/bash
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend
hibernar
#!/bin/bash
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate
Meu palpite é que os botões da GUI usam aproximadamente esses comandos. Para ter certeza, é preciso analisar o código, mas acredito que essa é uma aposta segura.