# Polkit-Regel wie?

## musv

Hallo, 

erstmal muss ich zugeben, dass ich bisher nicht wirklich viel zu diesem Thema gesucht hab. Hatte in letzter Zeit eher weniger Zeit. 

Problembeschreibung:

Mein XBMC soll beim Betätigen des Ausschalt-Buttons den Rechner runterfahren. 

Internes Kommando:

XBMC gibt dazu eine Routine vor, die über die Fernbedienung angesprochen werden kann: XBMC.ShutDown()

Konfiguration:

XBMC arbeitet als Standalone-Anwendung, d.h. es ist ein X-Server installiert. Consolekit läuft auch, die Sessions kann ich mit ck-list-sessions abfragen. Login-Manager oder Desktop-Environments sind aber nicht installiert. Hab auch kein Frontend a la systemsettings dabei. Gnome- und KDE-Bibliotheken soll der HTPC auch nie zu Gesicht bekommen.

Problem:

Wie muss jetzt die Polkit-Regel aussehen, um dem Nutzer XBMC das Recht zu gewähren, den Rechner runterzufahren? Und wo muss ich die Regel hinpacken? Ich hab das hier gefunden. Allerdings ist ja HAL nun schon seit einiger Zeit obsolet.

----------

## Finswimmer

Du meinst den Power-Button am Gehäuse?

Da sollte doch mit acpi standardmäßig schon eingestellt sein:

/etc/acpi/default.sh -->

case "$group" in

        button)

                case "$action" in

                        power)

                                #/sbin/init 0

                                #/usr/sbin/hibernate-ram

                                ;;

Du musst nur das passende einkommentieren.

----------

## musv

Nein, ich mein den Ausschalt-Button auf der Fernbedienung. 

Über inputlirc gibt die Fernbedienung KEY_POWER als Keycode an XBMC weiter. Und diese Taste belege ich in der /home/xbmc/.xbmc/userdata/keymaps/remote.xml mit XBMC.ShutDown(). 

Letzteres benötigt aber die Berechtigung, um den Rechner als normaler User runterfahren zu dürfen. Und das sollte mittels Polkit/Consolekit irgendwie möglich sein.

----------

## Randy Andy

Hi musv.

Ich kann dir die finale Lösung nicht genau nennen, aber eventuell hilft dir ja diese elog Meldung weiter das entsprechend für deine Erfordernisse umzusetzten.

Das Problem hatte ich so auch schon öfter bei diversen VDR-Installationen, dagegen half dann dieser Tipp gemäß nachfolgendem elog:

```

LOG: postinst

To make shutdown work add this line to /etc/sudoers

        vdr ALL=NOPASSWD:/usr/share/vdr/bin/vdrshutdown-really.sh

or execute this command:

        emerge --config gentoo-vdr-scripts

nvram wakeup is optional.

To make use of it emerge sys-power/nvram-wakeup.

Plugins which should be used are now set via its

own config-file called /etc/conf.d/vdr.plugins

or enabled via the frontend eselect vdr-plugin.

```

[Edit]

Gerade bin ich noch auf diesen Link gestoßen, der dir bei der Umsetzung weiterhelfen könnte:

http://www.gentoo.org/doc/en/sudo-guide.xml

Andy.

----------

## musv

Nun ja, gegen sudo oder vdrshutdown spricht, dass xbmc den Rechner runterfahren soll. Und das stellt mir halt nur die Fernbedienungsfunktionen zur Verfügung. Im Endeffekt werd ich diese Kommandos kaum auf die Alternativen umbiegen können.

----------

## Vangore612

Hatte das gleiche Problem, hier meine Lösung:

1. http://de.gentoo-wiki.com/wiki/ConsoleKit (Kernel, Start beim Boot (rc-update) und emerge)

2. emerge -av sys-auth/polkit

3. Datei ggf. Verzeichnis erstellen: /etc/polkit-1/localauthority/50-local.d/40-power.pkla

4. vi (ggf. nano wie auch immer) /etc/polkit-1/localauthority/50-local.d/40-power.pkla mit folgendem Inhalt (Benutzer anpassen "unix-user:xbmc")

```

[Local shutdown]

Identity=unix-user:xbmc

Action=org.freedesktop.consolekit.system.*;org.freedesktop.upower.*;org.freedesktop.udisks.*

ResultAny=yes

ResultInactive=no

ResultActive=yes

```

5. Ich habe dann noch meine .xinit angepasst und starte den "WM" nun wie folgt:

```

#!/bin/bash

exec /usr/bin/ck-launch-session /usr/bin/dbus-launch --exit-with-session /usr/bin/xbmc-standalone

```

6. Fertig  :Smile: 

Hoffe es hilft. Gruß

----------

## astaecker

Ich habe mir die "Actions" Datei fürs Herunterfahren & Co angesehen (/usr/share/polkit-1/actions/org.freedesktop.consolekit.policy). Laut der reicht es aus, der aktive Benuter zu sein. Da dies der Nutzer von XBMC wohl immer ist, bedarf es hier also keiner Regelung. Gleiches gilt für udisks (zumindestens für das Mounten und Unmounten von Wechseldatenträgern).

Natürlich muss dafür ConsoleKit richtig funktionieren, weshalb D-Bus und ConsoleKit laufen müssen und für XBMC eine Sitzung registriert werden muss. Der Befehl von Vangore612 ist dafür richtig.

Ich habe das mal kurz angetestet, wäre aber gut, wenn es noch ein XBMC Dauernutzer bestätigen würde.

@Vangore612:

Das .pkla Format wird von der akuell stabilen polkit Version nicht mehr unterstützt. Regel werden nun in .rules Dateien aufgesetzt.

----------

