Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Blog Ubuntu -- Správa "projektů" české komunity Ubuntu

Novinky: Školení nejen k OS Ubuntu pro širokou veřejnost, více informací zde.

Autor Téma: Skript - akce po probuzení ze spánku - vysvětlení.  (Přečteno 409 krát)

juwa2

  • Závislák
  • ****
  • Příspěvků: 2029
  • Karma: +143/-34
    • Zobrazit profil
Skript - akce po probuzení ze spánku - vysvětlení.
« kdy: 21 Květen 2018, 15:07:06 »
Zdravím.
Zkouším teď nové U 18.04 a potřebuji spouštět určitý skript po probuzení PC ze spánku (resume). Vím, že ve verzích 16.04+ je to jinak než dříve protože systemd.
Ve všech možných návodech které jsem našel, např. tu https://www.addictivetips.com/ubuntu-linux-tips/run-scripts-and-commands-on-suspend-and-resume-on-linux/  je tento postup.  Vytvořit spustitelný soubor
Kód: [Vybrat]
/lib/systemd/system-sleep/post-suspend
s tímto obsahem
Kód: [Vybrat]
#!/bin/sh/
if [ "${1}" == "pre" ]; then
# nothing goes here
elif [ "${1}" == "post" ]; then
sh /path/to/script.sh
fi

Bohužel to nefunguje, ani změna z #!/bin/sh/  na  #!/bin/bash/ nepomohla...
Po prozkoumání ostatních skriptů které ve složce /lib/systemd/system-sleep jsou jsem dospěl k tomuto již funkčnímu skriptu:
Kód: [Vybrat]
#!/bin/sh
set -e
if [ "$2" = "suspend" ]; then
    case "$1" in
    post) /path/to/script.sh ;;
    esac   
fi

Otázka tedy zní:  Proč skript který se uvádí ve všech návodech nefunguje?  Je to proto, že se v 18.04 zase něco změnilo"?
Nebo je chyba jinde, dosti by mě to totiž zajímalo.....

« Poslední změna: 21 Květen 2018, 18:00:17 od juwa2 »

GdH

  • Moderátor
  • Závislák
  • *****
  • Příspěvků: 3047
  • Karma: +483/-17
    • Zobrazit profil
    • GdH-Notes
Re:Skript - akce po probuzení ze spánku - vysvětlení.
« Odpověď #1 kdy: 21 Květen 2018, 20:14:47 »
Jestli v tom skriptu za then nic nedáš, tak shell neočekává elif a skončí chybou. Je celkem logické, že když nepotřebuješ zjišťovat stav "pre", tak ho netestuješ. Také je v dashi třeba používat jednoduché rovnítko při porovnávání řetězců, i když bash akceptuje dvojité i v jednoduchých hranatých závorkách. Jinak jsou ty dva skripty identicky nesmyslně komplikované.

juwa2

  • Závislák
  • ****
  • Příspěvků: 2029
  • Karma: +143/-34
    • Zobrazit profil
Re:Skript - akce po probuzení ze spánku - vysvětlení.
« Odpověď #2 kdy: 21 Květen 2018, 20:46:50 »
Tak jsem tedy za then dal ten stejný skript
Kód: [Vybrat]
#!/bin/sh/
if [ "${1}" == "pre" ]; then
sh /path/to/script.sh
elif [ "${1}" == "post" ]; then
sh /path/to/script.sh
fi

Změna veškerá žádná...  :-[
Dále se mi nechce věřit, že by to bylo v toliko návodech na všech těch webech špatně. Proto jsem pojal podezření na nějaké změny v 18.04, protože v diskusích pod návody  si všichni svorně pochvalují jak jim to funguje, ale nikdo výslovně neuvádí že na 18.04.
A k té nesmyslné komplikovanosti.  To si netroufám posoudit, ale jak jsem viděl i spousta ostatních skriptů přímo v instalaci OS je psána takto - ostatně, řešení jsem odtud odkoukal..
Ale třeba bys tedy prosím mohl mě (a tvůrcům Ubuntu) alespoň nastínit lepší (a hlavně funkční) řešení....

GdH

  • Moderátor
  • Závislák
  • *****
  • Příspěvků: 3047
  • Karma: +483/-17
    • Zobrazit profil
    • GdH-Notes
Re:Skript - akce po probuzení ze spánku - vysvětlení.
« Odpověď #3 kdy: 21 Květen 2018, 21:02:19 »
Napsal jsem čtyři věty. Třetí jsi zřejmě přehlédl úplně, druhou nepochopil.

juwa2

  • Závislák
  • ****
  • Příspěvků: 2029
  • Karma: +143/-34
    • Zobrazit profil
Re:Skript - akce po probuzení ze spánku - vysvětlení.
« Odpověď #4 kdy: 21 Květen 2018, 21:18:36 »
No jo, už z toho blbnu....
Kód: [Vybrat]
#!/bin/sh
if [ "${1}" = "post" ]; then
sh /path/to/script.sh
fi

Takže viníkem bylo dvojité rovnítko. Díky.... :)
« Poslední změna: 21 Květen 2018, 21:34:37 od juwa2 »

West

  • Návštěvník
  • *
  • Příspěvků: 88
  • Karma: +6/-0
    • Zobrazit profil
Re:Skript - akce po probuzení ze spánku - vysvětlení.
« Odpověď #5 kdy: 21 Květen 2018, 21:54:43 »
V niektorych pripadoch zrejme vadi porovnavanie dvoma rovnitkami. Tiez som na to narazil pri pisani skriptov. Pri pouziti jedneho rovnitka to fungovalo, pri pouziti dvoch bola podmienka chybne vyhodnotena. Zatial som sa nedokopal k analyzovaniu problemu kedy to funguje a kedy nie. Je mozne, ze to nefunguje len za urcitych podmienok. Napada ma neuvodzovanie argumentov, na obidvoch stanach, ci len na jednej, alebo druhej strane. Moznosti je samozrejme viac.