Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Do niedawna korzystałem ze skryptów Bunsena (fork Crunchbanga) ale niestety są napisane w pythonie 2x a jako, że używam sida to nie chce mi się ani kombinować ani przetrzymywać przestarzałych libów
Tak więc sprawa okazała się prostsza niż sądziłem, jak wiadomo systemd (dokładniej systemd-logind) umożliwia za pomocą polkit wyłączanie i restartowanie lokalnej maszyny zwykłym użytkownikom bez uprawnień roota i dzięki szatanu :) nie trzeba zaprzęgać do tak trywialnej rzeczy sudo, którego na desktopie nie używam i używać nie zamierzam. Więc do rzeczy:
wymagania:
- systemd > https://packages.debian.org/search?keywords=systemd
- polkit > https://packages.debian.org/search?keywords=policykit-1
- yad > https://packages.debian.org/search?keywords=yad
sprawdzamy czy mamy aktywną sesję:
$ loginctl show-session $XDG_SESSION_ID --property=Active Active=yes
w tym momencie (gdy rzecz jasna używamy systemd i mamy zainstalowany polkit) już możemy wyłączać i restartować maszynę z konta zwykłego usera:
$ systemctl poweroff $ systemctl reboot
a więc potrzeba nam skrypcia który narysuje okienko i przekaże wywołanie:
#!/usr/bin/env bash logoutctl(){ [[ -z $YAD_PID ]] || kill -SIGUSR1 $YAD_PID case $1 in cancel ) exit 0;; terminate-session | lock-session ) loginctl $1 $XDG_SESSION_ID;; suspend | hibernate | hybrid-sleep | reboot | poweroff ) [[ $(command -v systemctl) ]] && systemctl "$1" || loginctl "$1";; esac } export -f logoutctl yad --form --class=WmanExit --undecorated --center --on-top --skip-taskbar \ --sticky --form --columns 1 --width=200 --borders=7 --no-buttons \ --field="Cancel":fbtn 'bash -c "logoutctl cancel"' \ --field="Logout":fbtn 'bash -c "logoutctl terminate-session"' \ --field="Restart":fbtn 'bash -c "logoutctl reboot"' \ --field="Shut Down":fbtn 'bash -c "logoutctl poweroff"' &> /dev/null &
oczywiście nadajemy skryptowi prawa do wykonania i umieszczamy go dajmy na to w /usr/local/bin
jeszcze edycja openboksowego menu, przykładowo:
~/.config/openbox/menu.xml
<item label="Zamknij"> <action name="Execute"> <command>ob-exit</command>
-----------
PS. jeżeli chodzi o blokowanie sesji to polecam i3lock
https://packages.debian.org/search?keywords=i3lock
osobiście preferuję czarne tło bez zbędnych widżetów przy blokowaniu/odblokowywaniu sesji:
i3lock -c 000000 -n -u
odwołanie w menu:
~/.config/openbox/menu.xml
<item label="Zablokuj"> <action name="Execute"> <command>i3lock -c 000000 -n -u</command>
można sobie dodatkowo dla wygody podpiąć pod przykładowo ^+alt+l
~/.config/openbox/rc.xml
<keybind key="C-A-l"> <action name="Execute"> <command>i3lock -c 000000 -n -u</command>
a tak prezentuje się rysowanie skrypcia w yad
Ostatnio edytowany przez hi (2020-10-03 16:35:48)
Offline
wg dokumentacji systemd-poweroff.service:
systemd-halt.service is a system service that is pulled in by
halt.target and is responsible for the actual system halt. Similarly,
systemd-poweroff.service is pulled in by poweroff.target,
systemd-reboot.service by reboot.target and systemd-kexec.service by
kexec.target to execute the respective actions.
When these services are run, they ensure that PID 1 is replaced by
the /usr/lib/systemd/systemd-shutdown tool which is then responsible
for the actual shutdown. Before shutting down, this binary will try
to unmount all remaining file systems, disable all remaining swap
devices, detach all remaining storage devices and kill all remaining
processes.
Coś źle zrozumiałem?
Ostatnio edytowany przez hi (2020-10-03 16:33:07)
Offline
Chodzi o to, co się stanie np. z odpalonym Firefox, gdy zostanie zabity xserver? Gdybyś używał usług systemd do stawiania każdego procesu użytkownika (tak jak to jest w przypadku usług systemowych), to wtedy nie było by problemu i system by te usługi poprawnie zatrzymywał zanim zostanie zatrzymany xserver/openbox. Jeśli nie uruchamiasz usług via pliki .service (ja odpalam firefox'a przez plik .desktop albo z terminala), to wtedy systemd nie wie, że ma te usługi zatrzymać przed zatrzymaniem xserver'a. W efekcie jak xserver dostanie sygnał kill/term (wszystkie procesy dostają te sygnały przy zamykaniu systemu), to się natychmiast zakańcza, a że masz stado działających graficznych appek, to one w tej samej chwili tracą połączenie z xserver'em i zwykle crash'ują. Dlatego ja zawsze pierw zamykam wszystkie graficzne appki zanim rozpocznę procedurę restartu/zamykania systemu (choć ja zwykle i tak używam hibernacji xD).
Możesz przetestować sobie to zachowanie, np. odpal graficzny edytor tekstu. Daj tam nową wirtualną kartkę papieru i coś napisz ale bez zapisywania pliku -- chodzi o to by dane były w RAM. Jak teraz wyślesz sygnał term do appki edytora tekstu, to pojawi ci się prośba o zapisanie zmian przed zakończeniem procesu. Czy jak wyjdziesz z systemu sposobem, który opisałeś, to też dostaniesz taki monit? xD
Offline
ok dzięki za wyjaśnienie a czego używasz na ob do wyłączania maszyny?
Ostatnio edytowany przez hi (2020-10-03 17:39:40)
Offline
No jak pozamykam appki ręcznie, to systemctl reboot z konsoli. A jak chcę tylko restart sesji graficznej, to mam skrót openbox --exit podpięty pod ctrl+alt+q .
Ostatnio edytowany przez morfik (2020-10-03 17:45:32)
Offline
Strony: 1