hallo forum,
vorab ein wenig info:
ich habe mir auf basis von gentoo (i686) ein relativ schlankes system für meinen htpc konfiguriert, welches ausschliesslich xbmc als gui nutzt. um ein wenig settopbox feeling zu bekommen, setze ich auf openrc mit parallel startup und autologin. um den autologin zu bewerkstelligen gibt es nun, wie immer in der welt von linux, verschiedene möglichkeiten:
1. dm (xdm -> kdm, gdm, slim)
2. /etc/init.d/local.start
3. /etc/inittab
4. ...
da das system möglichst schlank bleiben soll, und nach einem praktischen vergleich xorg und xbmc per inittab subjektiv am schnellsten gestartet wird, habe ich mich dazu entschlossen die inttab für den autologin zu nutzen. auch ist ein respawn sehr angenehm, sollte xbmc einmal abschmieren; eine tastatur ist nicht angeschlossen, da wird es dann schwierig beim dm. meine vorgehensweise sieht folgendermassen aus:
/etc/inittab:
|
Quellcode
|
1
2
3
4
5
6
7
8
|
# TERMINALS
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
c2:2345:respawn:/sbin/agetty 38400 tty2 linux
c3:2345:respawn:/sbin/agetty 38400 tty3 linux
c4:2345:respawn:/sbin/agetty 38400 tty4 linux
c5:2345:respawn:/sbin/agetty 38400 tty5 linux
#c6:2345:respawn:/sbin/agetty 38400 tty6 linux
c6:2345:respawn:/usr/bin/openvt -fwc 7 -- /bin/su USER -l -c "/bin/bash --login -c startx >/dev/null 2>&1"
|
/etc/X11/Sessions/xbmc.desktop:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
|
[Desktop Entry]
Version=1.0
Name=XBMC Media Center
GenericName=Media Center
Comment=Manage and view your media
Exec=/usr/local/bin/xbmc-gentoo
Icon=xbmc.png
Terminal=false
Type=Application
Categories=AudioVideo;Video;Player;TV;
|
/etc/env.d/90xsession:
|
Quellcode
|
1
|
XSESSION="/usr/local/bin/xbmc-gentoo"
|
/usr/local/bin/xbmc-gentoo
|
Quellcode
|
1
2
3
|
#!/bin/bash
/usr/bin/xsetroot -cursor /opt/.modResources/xcursor/emptyCursor.xbm /opt/.modResources/xcursor/emptyCursor.xbm ;
/usr/bin/dbus-launch --exit-with-session /usr/bin/xbmc --standalone
|
grundsätzlich funktioniert auf diesem weg der autologin reibungslos, dennoch bin ich dabei auf ein paar probleme mit dbus, hal, consolekit und policykit gestossen. xbmc arbeitet grundsätzlich mit policies um nötige rechte zu bekommen, um z.b. mount, shutdown, restart, suspend, etc. ausführen zu dürfen. nachdem ich o.g. änderungen durchgeführt habe, musste ich festellen, dass mein benutzer keine rechte besitzt um per xbmc aktionen wie reboot, suspend, eject, usw. auszuführen. ein blick in xbmc.log brachte folgendes zu tage.
grep -i error | .xbmc/temp/xbmc.log:
|
Quellcode
|
1
2
3
4
|
00:30:51 T:3025618784 M:3096489984 ERROR: DBus: org.freedesktop.Hal.Device.PermissionDeniedByPolicy - org.freedesktop.hal.storage.mount-removable no <-- (action, result)
00:30:51 T:3025618784 M:3095982080 ERROR: DBus: org.freedesktop.Hal.Device.PermissionDeniedByPolicy - org.freedesktop.hal.storage.mount-removable no <-- (action, result)
00:30:52 T:3025618784 M:3091181568 DEBUG: ConsoleKit.Manager: org.freedesktop.DBus.Error.AccessDenied - A security policy in place prevents this sender from sending this message to this recipient, see message bus configuration file (rejected message had interface "org.freedesktop.ConsoleKit.Manager" member "CanStop" error name "(unset)" destination "org.freedesktop.ConsoleKit")
00:30:52 T:3025618784 M:3091181568 DEBUG: DeviceKit.Power: org.freedesktop.DBus.Error.ServiceUnknown - The name org.freedesktop.DeviceKit.Disks was not provided by any .service files
|
den devicekit fehler kann man vernachlässigen, ist nicht installiert und daher wird ein fehler ausgegeben. xbmc prüft verschiedene möglichkeiten, welche mit einem error geloggt werden falls davon eine nicht verfügbar ist. die beiden dbus fehler beziehen sich auf die versuche einen usb stick und eine dvd zu mounten. den consolekit fehler kann ich mir nicht ganz erklären. sieht man sich allerdings useflags von kdm oder gdm an, so stellt man fest, dass beide unterstützung für consolekit und policykit mitbringen. vermutlich sollte mit den beiden alles oob funktionieren. wie dem auch sei. zunächst habe ich versucht auf dem offiziellen weg per polkit-auth meinem benutzer diverse rechte zu verpassen, allerdings hat dies nichts an der situation geändert:
allgemein verfügbare policies:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
polkit-auth
org.freedesktop.hal.leds.brightness
org.freedesktop.hal.storage.mount-fixed
org.freedesktop.hal.storage.mount-removable
org.freedesktop.hal.storage.unmount-others
org.freedesktop.hal.storage.eject
org.freedesktop.hal.storage.crypto-setup-fixed
org.freedesktop.hal.storage.crypto-setup-removable
org.freedesktop.hal.dockstation.undock
org.freedesktop.hal.power-management.shutdown
org.freedesktop.hal.power-management.shutdown-multiple-sessions
org.freedesktop.hal.power-management.reboot
org.freedesktop.hal.power-management.reboot-multiple-sessions
org.freedesktop.hal.power-management.set-powersave
org.freedesktop.hal.power-management.suspend
org.freedesktop.hal.power-management.hibernate
org.freedesktop.hal.power-management.cpufreq
org.freedesktop.hal.power-management.lcd-panel
org.freedesktop.hal.power-management.light-sensor
org.freedesktop.hal.power-management.keyboard-backlight
org.freedesktop.policykit.read
org.freedesktop.policykit.revoke
org.freedesktop.policykit.grant
org.freedesktop.policykit.modify-defaults
org.freedesktop.hal.lock
org.freedesktop.hal.wol.enabled
org.freedesktop.hal.wol.enable
org.freedesktop.hal.wol.supported
org.freedesktop.hal.killswitch.bluetooth
org.freedesktop.hal.killswitch.wlan
org.freedesktop.hal.killswitch.wwan
org.freedesktop.consolekit.system.stop
org.freedesktop.consolekit.system.stop-multiple-users
org.freedesktop.consolekit.system.restart
org.freedesktop.consolekit.system.restart-multiple-users
|
verfügbare policies für USER:
|
Quellcode
|
1
|
polkit-auth --user USER --show-obtainable
|
hm, keine verfügaren policies für den USER?
gewähre USER diverse aktionen:
|
Quellcode
|
1
2
3
4
|
polkit-auth --user USER --grant org.freedesktop.hal.power-management.suspend
polkit-auth --user USER --grant org.freedesktop.hal.power-management.reboot
polkit-auth --user USER --grant org.freedesktop.hal.power-management.shutdown
polkit-auth --user USER --grant org.freedesktop.hal.storage.mount-removable
|
prüfe ob alle berechtigungen übernommen wurden:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
|
cat /var/lib/PolicyKit/user-USER.auths
# This file lists authorizations for user USER
#
# File format may change at any time; do not rely on it. To manage
# authorizations use polkit-auth(1) instead.
scope=grant:action-id=org.freedesktop.hal.power-management.suspend:when=1259279029:granted-by=0
scope=grant:action-id=org.freedesktop.hal.power-management.reboot:when=1259279034:granted-by=0
scope=grant:action-id=org.freedesktop.hal.power-management.shutwown:when=1259279039:granted-by=0
scope=grant:action-id=org.freedesktop.hal.storage.mount-removable:when=1259279309:granted-by=0
|
nun gut. policies wurden erfolgreich übernommen, eigentlich sollten diese sofort greifen. leider fehlanzeige. ein neustart veränderte ebenfalls nichts an der situation. weder darf ich neustarten, herunterfahren, schlafen gehen oder extere medien benutzen. meiner meinung nach funktioniert es auf grund der bereits o.g. erwähnten consolekit fehlermeldung. noch mal zur wiederholung:
grep -i error | .xbmc/temp/xbmc.log:
|
Quellcode
|
1
|
00:30:52 T:3025618784 M:3091181568 DEBUG: ConsoleKit.Manager: org.freedesktop.DBus.Error.AccessDenied - A security policy in place prevents this sender from sending this message to this recipient, see message bus configuration file (rejected message had interface "org.freedesktop.ConsoleKit.Manager" member "CanStop" error name "(unset)" destination "org.freedesktop.ConsoleKit")
|
offensichtlich kann "org.freedesktop.ConsoleKit.Manager" nicht mit "org.freedesktop.ConsoleKit" sprechen, da eine policy genau das verhindert!? sollte dem so sein, so nehme ich an, dass alles im lot wäre, wenn die beiden sich unterhalten könnten. im anschluss habe ich folgendes geprüft:
prüfung aktiver sessions:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
ck-list-sessions
Session1:
unix-user = '1000'
realname = ''
seat = 'Seat1'
session-type = ''
active = TRUE
x11-display = ':0'
x11-display-device = '/dev/tty6'
display-device = '/dev/tty7'
remote-host-name = ''
is-local = TRUE
on-since = '2009-11-27T02:27:45.798596Z'
login-session-id = ''
|
mein user erhält keine login-session-id. könnte das alle probleme hervorrufen? falls ja, wie bringe ich mein system dazu, dem benutzer eine id zu vergeben?
da ich auf dem offiziellen weg nicht weitergekommen bin, habe ich folgende "lösungen" ausprobiert, welche ich aber nicht dauerhaft einsetzen möchte, allerdings zum gewüschten ziel führen:
lösung 1:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
cat /etc/PolicyKit/PolicyKit.conf
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
<!DOCTYPE pkconfig PUBLIC "-//freedesktop//DTD PolicyKit Configuration 1.0//EN"
"http://hal.freedesktop.org/releases/PolicyKit/1.0/config.dtd">
<!-- See the manual page PolicyKit.conf(5) for file format -->
<config version="0.1">
<define_admin_auth group="wheel"/>
<match user="USER">
<return result="yes"/>
</match>
</config>
|
ersetze ich "root" durch "USER" funktioniert alles wie gewünscht, kann aber nicht im sinne des erfinders sein.
lösung 2:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
cat /etc/PolicyKit/PolicyKit.conf
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
<!DOCTYPE pkconfig PUBLIC "-//freedesktop//DTD PolicyKit Configuration 1.0//EN"
"http://hal.freedesktop.org/releases/PolicyKit/1.0/config.dtd">
<!-- See the manual page PolicyKit.conf(5) for file format -->
<config version="0.1">
<match action="org.freedesktop.hal.storage.mount-removable">
<return result="yes"/>
</match>
<match action="org.freedesktop.hal.power-management.shutdown">
<return result="yes"/>
</match>
<match action="org.freedesktop.hal.power-management.reboot">
<return result="yes"/>
</match>
<match action="org.freedesktop.hal.power-management.suspend">
<return result="yes"/>
</match>
<match action="org.freedesktop.hal.power-management.set-powersave">
<return result="yes"/>
</match>
<match action="org.freedesktop.hal.power-management.lcd-panel">
<return result="yes"/>
</match>
<match action="org.freedesktop.hal.storage.eject">
<return result="yes"/>
</match>
<match action="org.freedesktop.hal.storage.mount-removable">
<return result="yes"/>
</match>
</config>
|
auch hier funktioniert alles wie gewünscht, nur kommt dieser weg auch nicht dauerhaft in frage.
tjo, was meint ihr? wo hakt es hier? ich habe ja den consolekit error im xbmc.log in verdacht, und nehme an dass dieser mit der fehlenden session id in verbindung steht. irgendwelche configs möchte ich nicht unbedingt verbiegen und missbrauchen, sondern schon eher den offiziellen weg gehen.
über hinweise bin ich schonmal im voraus dankbar.
bis später,
hal2050