Ubuntu est une distribution du système d'exploitation GNU/Linux qui appartient à son tour à la famille des systèmes Unix - une architecture commune à un certain nombre de systèmes d'exploitation modernes.
Traditionnellement, Unix fonctionnait sur des ordinateurs centraux. Des installations informatiques centrales qui servent des dizaines ou des centaines d'utilisateurs via des terminaux distants. Comme tous les utilisateurs dépendaient de la disponibilité de l'ordinateur central, aucun utilisateur n'était autorisé à lancer une commande d'arrêt. Une idée fondamentale de l'architecture Unix - le noyau du système n'initialisera jamais un arrêt à moins que la fonction correspondante ne soit appelée par un processus super-utilisateur.
Dans les systèmes de bureau contemporains, les développeurs se sont donné beaucoup de mal pour mettre l'arrêt à la disposition du simple utilisateur du bureau. Une technique courante consiste à laisser le gestionnaire de connexion, qui s'exécute généralement dans le contexte de sécurité de l'utilisateur root, gérer l'arrêt et le redémarrage. Dans ce cas, le Shell graphique émet une requête au gestionnaire de connexion pour arrêter l'ordinateur. Cela implique l'utilisation de la communication interprocessus (IPC), généralement via le service dbus.
Le policykit mentionné ci-dessus étend ce processus en fournissant un cadre standardisé par lequel le gestionnaire de connexion (ou tout autre programme fournissant le service d'arrêt) peut vérifier quels utilisateurs sont autorisés à provoquer un arrêt, et par lequel un administrateur peut configurer ces permissions respectivement.
Certains environnements de bureau n'utilisent pas de services basés sur l'IPC mais plutôt un ensemble de programmes d'aide pour fournir des fonctions identiques ou similaires. Ces programmes d'aide sont appelés par des mécanismes permettant de passer dans le contexte du super-utilisateur, comme sudo, suid, ou un mécanisme de policykit similaire à sudo.
Dans tous les cas, le programme traditionnel d'arrêt sur le Shell ne fonctionne pas de cette façon, il nécessite de voir qu'il est exécuté dans un contexte de superutilisateur.