Je to trochu komplikovanější. logind je součástí systemd, který je náhradou za sysvinit a slouží k zavádění systému, tedy spouští inicializační skripty. Ubuntu si ale vyvinulo vlasní náhradu a tou je Upstart, který používá již pár let, opuštět ho zatím nehodlá a tak ze systemd vyrvali jen logind a nacpali ho na stávající systém. Protože je logind nedílnou a integrovanou součástí systemd, bude podle jeho tvůrců problém s další aktualizací logind v Ubuntu, takže bude vždy dost pozadu.
Pokud budete opuštěné služby potřebovat (například pro Cinnamon 2.0, jak jsem zjistil od jednoho uživatele), můžete si je doinstalovat sami:
sudo apt-get install consolekit upower
Po rebootu vám začne bez problémů fungovat i SGTimer jako doposud.
Systemd-logind
Zajišťuje správu uživatelských sezení a přístup uživatelů k funkcím jako vypnutí a uspání systému v souladu s PolicyKit, tedy systémovou politikou přístupu uživatelů k těmto funkcím. Stará se o hardwarové klávesy Power a Sleep, přepínání uživatelských sezení, správu přístupu uživatelů k zařízením, ...V systému se nachází v
/lib/systemd/systemd-logind
DBus rozhraní služby se hlásí jako
org.freedesktop.login1
na systémové sběrnici:
Využití login1 z příkazové řádky
Pokud jste si zvykli používat ve svých skriptech vypínání/uspávání systému pomocí DBus rozhraní ConsoleKit a UPower, která nevyžadují zadávání hesla administrátora, jednoduše přejdete na login1, který vám nabídne celý repertoár předchozích dvou služeb.Vypnutí/Shutdown/Power Off
dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.PowerOff boolean:false
Uspání/Suspend
dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.Suspend boolean:false
Hibernace
dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.Hibernate boolean:false
Reboot/Restart
dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.Reboot boolean:false
Na dostupnost uvedených služeb se můžete i přeptat předem, stačí z předchozích příkazů umazat část boolean:false a před jméno metody přidat Can:
CanPowerOff, CanSuspend, CanHibernate, CanReboot
Vrátí se vám string "yes", nebo "no" společně s dalším bordelem. Zajímalo by mě, proč z boolean informace udělali string, ale je pravda, že z DBus to stejně leze v XML formátu..
login1 ve Vala
Zkrátka si musíte napsat jiný interface:
[DBus (name= "org.freedesktop.login1.Manager")]
interface Login1 : GLib.Object
{
public abstract void hibernate (bool interactive = false) throws IOError;
public abstract void suspend (bool interactive = false) throws IOError;
public abstract void power_off (bool interactive = false) throws IOError;
public abstract void reboot (bool interactive = false) throws IOError;
public abstract string can_hibernate () throws IOError;
public abstract string can_suspend () throws IOError;
public abstract string can_power_off () throws IOError;
public abstract string can_reboot () throws IOError;
}
l1_proxy = Bus.get_proxy_sync (BusType.SYSTEM,
"org.freedesktop.login1", "/org/freedesktop/login1");
try {
if (l1_proxy.can_power_off() == "yes")
l1_proxy.power_off ();
} catch (IOError e) {
stderr.printf(e.message);
}
interface Login1 : GLib.Object
{
public abstract void hibernate (bool interactive = false) throws IOError;
public abstract void suspend (bool interactive = false) throws IOError;
public abstract void power_off (bool interactive = false) throws IOError;
public abstract void reboot (bool interactive = false) throws IOError;
public abstract string can_hibernate () throws IOError;
public abstract string can_suspend () throws IOError;
public abstract string can_power_off () throws IOError;
public abstract string can_reboot () throws IOError;
}
l1_proxy = Bus.get_proxy_sync (BusType.SYSTEM,
"org.freedesktop.login1", "/org/freedesktop/login1");
try {
if (l1_proxy.can_power_off() == "yes")
l1_proxy.power_off ();
} catch (IOError e) {
stderr.printf(e.message);
}
V SGTimeru, který přepisuju do Vala, jsem již podporu login1 dopsal, v blízké době to zas všechno vyexportuju do svn (update: již to tam je). Momentálně mi plně funguje většina funkčnosti, kterou běžný uživatel ocení, jen ukládání předvoleb, indikátor v panelu a WFT modul (čekání na ukončení procesu/okna) chybí. Jde mi to pomalu, protože se rozptyluju psaním rozšíření pro GNOME Shell a dalšími zajímavými kravinami :)
Žádné komentáře:
Okomentovat
Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.
Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.