Portál AbcLinuxu, 1. května 2024 03:51


Dotaz: Dočasně zabránit vypnutí počítače + info uživateli

23.12.2021 21:33 Deryl | skóre: 11
Dočasně zabránit vypnutí počítače + info uživateli
Přečteno: 635×
Odpovědět | Admin
Ahoj všem,

používám `systemd-inhibit` pro spuštění zálohovacího skriptu (borgmatic pomocí systemd timer) - funguje skvěle, uživatel nemůže vypnout počítač (Ubuntu 18.04 LTS).

Bohužel se mu však nezobrazí důvod ani žádná jiná hláška - prostě se jen nevypne. Uživatel se nenechá odradit a počítač vypne natvrdo tlačítkem... :-(

Lze nějak komunikovat z bash skriptu směrem k uživateli (nikoliv formou notifikace, ale zobrazením hlášky při pokusu o vypnutí/restart)?

P.S. Pokud to vůbec lze, tak předpokládám, že kvůli DBUS a X DISPLAY bude snazší pouštět skript ze sezení uživatele (volba `--user` pro systemd). To by z pohledu zálohovacího skriptu nemělo vadit.
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

24.12.2021 00:16 qw11
Rozbalit Rozbalit vše Re: Dočasně zabránit vypnutí počítače + info uživateli
Odpovědět | | Sbalit | Link | Blokovat | Admin

Nemam to vyskusane ale pozri toto

https://www.golinuxcloud.com/run-script-with-systemd-before-shutdown-linux/

Hlaska by sa mohla zobrazit pomocou zenity.

25.12.2021 12:00 Alfik
Rozbalit Rozbalit vše Re: Dočasně zabránit vypnutí počítače + info uživateli
Odpovědět | | Sbalit | Link | Blokovat | Admin
Do bash skriptu dat

export DISPLAY=:0 notify-sent "nevypinaj PC"
25.12.2021 20:54 Deryl | skóre: 11
Rozbalit Rozbalit vše Re: Dočasně zabránit vypnutí počítače + info uživateli
Odpovědět | | Sbalit | Link | Blokovat | Admin
Díky za nápovědu, nakonec toto vypadá jako cesta:
# cat /etc/systemd/user/gnome-session-shutdown.target.wants/mk_backup-running.service

[Unit]
Description=MK: check if backup is running
DefaultDependencies=no
Before=gnome-session-shutdown.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/mk_check-backup-running.sh

[Install]
WantedBy=gnome-session-shutdown.target
A ten ExecStart skript obsahuje kontrolu, zda běží borgmatic, a pokud ano, tak pomocí zenity zobrazí dialog - Logout proces se dokonce pozastaví.

DISPLAY a Xauthority netřeba řešit, neb systemd --user je obsahuje v environment.

P.S. Zkoušel jsem i notify-send, ale to se během odhlášení vůbec nezobrazilo. Při spuštění z terminálu ano.
26.12.2021 11:15 jiwopene | skóre: 31 | blog: Od každého trochu…
Rozbalit Rozbalit vše Re: Dočasně zabránit vypnutí počítače + info uživateli
Takže při odhlášení se zabrání jakékoliv práci s počítačem? Je možné se, pokud si uživatel vypínání rozmyslí, znovu přihlásit?
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky.
26.12.2021 14:48 Deryl | skóre: 11
Rozbalit Rozbalit vše Re: Dočasně zabránit vypnutí počítače + info uživateli
Výše uvedené neřeší zabránění práce s počítačem, pouze zobrazí dialogové okno před ukočením GNOME session. Důvodem je sdělení uživateli, proč se počítač nenechá vypnout.

P.S. Na pozadí mi běží jiný proces - borgmatic - který je spuštěn se std systemd-inhibit, a tento zabrání vypnutí/restartu/spánku. Odhlásit se uživatel může a stejně tak i přihlásit.

P.S. A taková bohužel podstatná drobnost: v Ubuntu 18.04 se GNOME spouští jiným způsobem než v Archu (kde jsem to testoval), takže ještě musím najít správný spouštěč než "gnome-session-shutdown.target" :-(, tak aby se to zobrazilo ještě před ukončením DM...
27.12.2021 19:06 Deryl | skóre: 11
Rozbalit Rozbalit vše Re: Dočasně zabránit vypnutí počítače + info uživateli
Hm, nadšení bylo vskutku předčasné.

Jednak v Ubuntu bylo potíž pustit zenity ještě předtím, než se shodí X11 session - nepodařilo se mi najít kombinaci "Before/After/..." pro systemd service unit.

A jednak při aktivním systemd-inhibit (sleep/shutdown/...), se systemd asi ani nedostane ke slovu, v logu se objejí jen:
dec 26 21:41:18 t410s gnome-shell[8333]: endSessionDialog: No XDG_SESSION_ID, fetched from logind: 17
dec 26 21:41:19 t410s gnome-shell[8333]: endSessionDialog: No XDG_SESSION_ID, fetched from logind: 17
dec 26 21:41:22 t410s gnome-session[8314]: gnome-session-binary[8314]: WARNING: Shutdown failed: GDBus.Error:System.Error.ESTALE: Stale file handle
dec 26 21:41:22 t410s gnome-session-binary[8314]: WARNING: Shutdown failed: GDBus.Error:System.Error.ESTALE: Stale file handle
dec 26 21:41:22 t410s gnome-session-binary[8314]: Entering running state
dec 26 21:41:22 t410s gnome-shell[8333]: Ignored exception from dbus method: Gio.IOErrorEnum: GDBus.Error:org.gtk.GDBus.UnmappedGError.Quark._g_2dio_2derror_2dquark.Code19: 
Takže by to bylo třeba navázat na samotné GNOME...

Zatím jsem to obešel tím, že rodičům při běžícím zálohovacím skriptu dočasně zobrazím jiný wallpaper...
27.12.2021 14:00 dav12
Rozbalit Rozbalit vše Re: Dočasně zabránit vypnutí počítače + info uživateli
Odpovědět | | Sbalit | Link | Blokovat | Admin
Příkaz "write" nebo "wall". Na gentoo je to balík sys-apps/util-linux s useflagem tty-helpers - na Ubuntu netuším.
27.12.2021 23:38 j
Rozbalit Rozbalit vše Re: Dočasně zabránit vypnutí počítače + info uživateli
Odpovědět | | Sbalit | Link | Blokovat | Admin
A co to vyresit jako jinde? Proste kdyz da vypnout, tak mu v nicem branit nebudes, jen mu pustis pres celou obrazovku pekne animaci "system se vypina" s nejakejma tema presejpackama, a rekneme za 30s zhasnes monitor. Klidne se vsadim, ze ani jedinej user nebude cekat, a proste od stroje odejde.

Widlouseri jsou v tomhle ohledu trenovani borci, a neprekvapi je ani vypinani (nebo zapinani) pres hodinu ... ;D

---

Dete s tim guuglem dopice.
28.12.2021 06:40 jejda | skóre: 23 | blog: jejda
Rozbalit Rozbalit vše Re: Dočasně zabránit vypnutí počítače + info uživateli
Odpovědět | | Sbalit | Link | Blokovat | Admin
Taky by šel udělat falešný shutdown jako alias přímo v ~/.bashrc
alias shutdown="while pgrep -f zálohovací-skript.sh > /dev/null 2>&1; do echo \"probíhá zálohování!\"; sleep 5; done; shutdown"
Až se zálohování dokončí, počítač to vypne automaticky.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.