Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Téma založeno: JirkaZ 24 Října 2024, 20:20:58

Název: GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 24 Října 2024, 20:20:58
Stručně popíšu situaci:

mám několik skriptů s prakticky stejným obsahem (liší se jen parametry). Slouží pro posílání řídících znaků (řetězců) přes sériový port. Příklad příkazu (normálně se spouští v konzoli), který by byl jako jeden skript (parametry, resp. zasílané znaky či řetězce jsou v uvozovkách):

Kód: [Vybrat]
stty -F /dev/ttyS5 19200 -parity cs8 -cstopb && echo -e -n "\x1b\x48\x30" > /dev/ttyS5
Rád bych k těmto (cca 5 až 10) skriptům udělal GUI, kde by se v okně myší "mačkala" tlačítka a po zmáčknutí by se na pozadí (tj. bez viditelně otevřeného okna s konzolí) příslušný skript spustil.

Při letmém zkoumání možností, jak to udělat, jsem narazil na Zenity, Kdialog apod., ale nikde jsem nenašel příklad odpovídající popisu výše.

Poradil by někdo? Nejlépe přímo příkladem (tj. kódem)...

Díky.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: Ventero 24 Října 2024, 21:02:51
Pokud vím, tak v obou dvou uvedených aplikacích se dá udělat asi jen potvrzovačka. Kdialog bude ale nativ pro KDE.
Ale bylo něco takového, čím se skládali okna pro výkon skriptů. Bylo to použito třeba tuším pro grub-doctor ve starých Parted Magic a v SalineOS. Tenkrát jsem ho zkusil portovat a zjistil jsem to prostředí, které se však musí doinstalovat. Akorát se pak naučit syntaxi.

takže když půjdeš po stopách grub-doctor, tak najdeš, to co hledáš :)

Tak se to myslím jmenuje "Yad", ale jak na to koukám zběžně, tak by to možná šlo i v tom Zenity - myslím, že jsem to tenkrát takhle přepsal.
Tady je script, který napoví, jak se s tím pracuje:
https://github.com/xanadu-linux/xanadu-grubdoctor/blob/master/grub-doctor

Ale nevím, jestli se s tím dá udělat třeba víc tlačítek. Tak bych se spíš koukal na to jak skládat okna přímo - tzn, nějaký CSS nebo tak něco? ...
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 24 Října 2024, 21:26:59
Já jsem zatím šel "po stopách" ChatGPT (zcela proti svému přesvědčení) a něco (i když nedokonale) už to dělá.

Nejhorší je tomu blbému stroji položit otázku tak, aby nenabízel úplné nesmysly...
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: West 25 Října 2024, 09:43:16
Ak nepotrebuješ vidieť reakciu skriptu, tak by asi išlo urobiť spúšťače a poklepávať na ne myšou z plochy. Ja si takým spôsobom mením parametre power managamentu kedy potrebujem aby sa mi PC niekedy uspal za 10 minút nečinnosti, inokedy za 2 hodiny.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 25 Října 2024, 12:43:12
West: jo, to je jistě možné, podobně lze třeba spouštět ty "subskripty" třeba poklepáním na ně v Krusaderu.

Ale chtěl jsem mít vše pohromadě (tedy v tom jednom okně), taky to chápu jako něco nového, čemu se přiučím.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 25 Října 2024, 22:03:24
Kód: [Vybrat]
#! /usr/bin/env bash

odpoved=$(zenity --info --title 'Moje okno' \
      --text 'Vyber si:' \
      --extra-button PRVA \
      --extra-button DRUHA \
      --extra-button TRETI \
      --extra-button CTVRTA \
      --ok-label Storno\
       )
  navrat=$?

# Test návratové hodnoty
if [ $navrat -eq 0 ]; then
  exit 0
fi

# Testy odpovědí
case $odpoved in
  PRVA) echo "$odpoved jsi si vybral"
    echo "Ty dva oddělovací středníky jsou důležité"
    ;;
  DRUHA) echo "Fakt chceš dvojku?"
    ;;
  TRETI) echo "$odpoved - tak ta se ti vymstí"
    ;;
  CTVRTA) echo "$odpoved je ta správná volba. Už jsi profík :D"
    ;;
esac

Myslím, že je to dost názorně napsáno, takže vzhůru do úprav. Na ten script si udělej spouštěč na ploše a hotovo.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 26 Října 2024, 19:12:52
ramaeli díky, běhá to, ale:

1) postrádám tam část, která bude spouštět příslušné subskripty (resp. asi tam alespoň v základu je, ale nevidím ji) - čili poprosím o doplnění v tom smyslu (subskripty budiž třeba a.sh, b.sh a c.sh);

2) potřebuju, aby se okno po volbě libovolné z aktivních hodnot (tzn. některého z nabízených tlačítek => subskriptů kromě Storno) nezavřelo, ale bylo připravené na další volbu (jde  to, ejaj vytvořený kód to umí).

Vážně nejsem programátor, takže mě ber s rezervou ;-) Zvládám s odřenýma ušima jednoduché věci v Basicu, nějaké úplné základy z Arduino IDE apod.

Edit: krůček už jsem udělal a snad to ty subskripty spouští:

Kód: [Vybrat]
#! /usr/bin/env bash

odpoved=$(zenity --info --title 'Moje okno' \
      --text 'Vyber si:' \
      --extra-button PRVA \
      --extra-button DRUHA \
      --extra-button TRETI \
      --ok-label Storno\
       )
  navrat=$?

# Test návratové hodnoty
if [ $navrat -eq 0 ]; then
  exit 0
fi

# Testy odpovědí
case $odpoved in
PRVA) ./a.sh
    ;;
DRUHA) ./b.sh
    ;;
TRETI) ./c.sh
    ;;
esac
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: Ventero 26 Října 2024, 19:49:07
Jeste zalozky by se mohly v tom okne hodit - to by se mozna vytahlo z toho grubdoctor.
Zenity je tusim i v xfce. Myslim, ze jsem tenkrat ten skript vzal a vsechno "yad" jsem prepsal na "zenity" a fachalo to. A tam i to retezeni na vykon prikazu.

Kdyz uz jsme u toho ve Win je Notepad++ a ten umi hromadny prepis, nahrazeni znaku atp. - je nejaka obdoba v Deb-linux? To by dost zjednodusilo takovy prepis skriptu pro jine prostredi ..
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 26 Října 2024, 21:14:37
Jeste zalozky by se mohly v tom okne hodit - to by se mozna vytahlo z toho grubdoctor.
Zenity je tusim i v xfce. Myslim, ze jsem tenkrat ten skript vzal a vsechno "yad" jsem prepsal na "zenity" a fachalo to. A tam i to retezeni na vykon prikazu.

Kdyz uz jsme u toho ve Win je Notepad++ a ten umi hromadny prepis, nahrazeni znaku atp. - je nejaka obdoba v Deb-linux? To by dost zjednodusilo takovy prepis skriptu pro jine prostredi ..
Uff, ty mne dáváš. Zenity jede na Xkách. Takže to spustíš snad všude vyjma absolutně čistého Waylandu. A to má jen pár lidí, protože většina distribucí většinou přidává Xwayland kvůli zpětné kompatibilitě.
Hromadný přepis umí skoro každý normální texťák. Dost často to používám, na přejmenování proměnných, funkcí ap. Ale přepisovat takto skript pro jiné prostředí, si troufnu říct že nebude fungovat.
Hromadný přepis v neovimu (můj best už spousty let) a tím pádem ve vimu (kdysi jediný normální texťák):
Kód: [Vybrat]
ESC na základní mód
:%s/co chceš přepsat/čím to přepsat/gc
ENTER
Přepis v micro textovém editoru (je to fakt bomba. Jediná chybka že neumí LSP):
Kód: [Vybrat]
ctrl+e
replace "co chceš přepsat" "čím to přepsat"
ENTER
potvrzení klávesou y
Nano:
Kód: [Vybrat]
alt+r
co chceš nahradit
ENTER
čím to nahradit
ENTER
potvrzení klávesou a
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 26 Října 2024, 21:49:18
ramaeli díky, běhá to, ale:

1) postrádám tam část, která bude spouštět příslušné subskripty (resp. asi tam alespoň v základu je, ale nevidím ji) - čili poprosím o doplnění v tom smyslu (subskripty budiž třeba a.sh, b.sh a c.sh);

2) potřebuju, aby se okno po volbě libovolné z aktivních hodnot (tzn. některého z nabízených tlačítek => subskriptů kromě Storno) nezavřelo, ale bylo připravené na další volbu (jde  to, ejaj vytvořený kód to umí).

Vážně nejsem programátor, takže mě ber s rezervou ;-) Zvládám s odřenýma ušima jednoduché věci v Basicu, nějaké úplné základy z Arduino IDE apod.

Edit: krůček už jsem udělal a snad to ty subskripty spouští:

Kód: [Vybrat]
#! /usr/bin/env bash

odpoved=$(zenity --info --title 'Moje okno' \
      --text 'Vyber si:' \
      --extra-button PRVA \
      --extra-button DRUHA \
      --extra-button TRETI \
      --ok-label Storno\
       )
  navrat=$?

# Test návratové hodnoty
if [ $navrat -eq 0 ]; then
  exit 0
fi

# Testy odpovědí
case $odpoved in
PRVA) ./a.sh
    ;;
DRUHA) ./b.sh
    ;;
TRETI) ./c.sh
    ;;
esac
Jdeš na to správně.
Kód: [Vybrat]
#! /usr/bin/env bash

navrat=1
while [ $navrat -eq 1 ]; do
odpoved=$(zenity --info --title 'Moje okno' \
      --text 'Vyber si:' \
      --extra-button PRVA \
      --extra-button DRUHA \
      --extra-button TRETI \
      --ok-label Storno\
       )
  navrat=$?

# Testy odpovědí
case $odpoved in
PRVA) ./a.sh
    ;;
DRUHA) ./b.sh
    ;;
TRETI) ./c.sh
    ;;
esac
done
Okno ve smyčce. Jen se musela změnit podmínka návratové hodnoty a dát to do smyčky while. Ono v bash se dost blbě něco píše, chce to jinak myslet.
Arduino je důvod proč jsem si nedávno zaneřádil systém Xkama. Pořídil jsem si nové převodníky USB/UART na programování Atmelů. No a chvíli na to mne skolil Covid. Po pár dnech kdy jsem se trochu zmátořil a začal více vnímat mne zarazilo ticho. Nešla chladnička. Odešel ten regulátor teploty. Je to 20 let starý kousek a nedařilo se mne na internetu sehnat tu blbost s trubičkou s plynem. A páč věcem nejradši dávám další život. Napsal jsem jednoduchý prg na Atmel aby to snímalo teplotu uvnitř chladničky a podle toho spouštělo přes SSR relátko kompresor. Jenže jak jsem byl ještě trochu mentálně mimo, nedařilo se mne chip flashnout tím novým převodníkem. A tak jsem to hodil do arduina a nejjednodušší bylo nainstalovat tu jejich parodii na IDE. A tím se mi dostali Xka do systému. Ale chladnička jede jako fík. Při dosažení 4,5°C se kompresor vypne a zapne se až při 7°C.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 26 Října 2024, 22:16:29
ramael: jo jo, okno už zůstává otevřené, díky. Ještě to později vyzkouším s reálnými subskripty a pokud bude vše fungovat, tak spokojenost :-)

Mimochodem: šlo by všechny skripty (tedy tento hlavní probíraný a ty ovládací subskripty) spojit do jednoho?
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 27 Října 2024, 02:31:43
ramael: jo jo, okno už zůstává otevřené, díky. Ještě to později vyzkouším s reálnými subskripty a pokud bude vše fungovat, tak spokojenost :-)

Mimochodem: šlo by všechny skripty (tedy tento hlavní probíraný a ty ovládací subskripty) spojit do jednoho?
Samozřejmě. Tam kam jsi zadal názvy subskriptů napiš přímo jejich obsah. Jako jsem měl v prvním příkladě dvě echa.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 27 Října 2024, 12:47:28
Ještě dodatek. Jde si to samozřejmě pojmenovat i lidštěji:
Kód: [Vybrat]
#! /usr/bin/env bash

navrat=1
while [ $navrat -eq 1 ]; do
odpoved=$(zenity --info --title 'Moje okno' \
      --text 'Vyber si:' \
      --extra-button "První sekvence" \
      --extra-button "Ty ty ty zlobivý porte" \
      --extra-button TRETI \
      --ok-label Storno\
       )
  navrat=$?

# Testy odpovědí
case $odpoved in
"První sekvence") ./a.sh
    ;;
"Ty ty ty zlobivý porte") ./b.sh
    ;;
TRETI) ./c.sh
    ;;
esac
done
A pak bych se ještě osobně přikláněl nechat to v oddělených scriptech. Ta fragmentace z monolitického scriptu (programu, funkce atd.) je lepší na hledání chyb, či příští úpravu. Časem se třeba bude něco muset poupravit. A v monolitu to budeš muset najít a něco přepsat. Vzniká možnost chyby. Kdežto kousky kódů se spravují lépe.
Na záložky jako takové zenity není. Více i s příklady tady https://help.gnome.org/users/zenity/stable/index.html.en
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: Ventero 27 Října 2024, 16:09:39
Jestli by nebylo nakonec lepsi si nezjistit, jak vyuzit tu zakladni stavbu oken primo na urovni WM.
Nekdy na to zkusim, jen tak akademicky, mrknout ..
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: Ventero 27 Října 2024, 16:55:43
Mrkni jeste na tcl/tk
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 27 Října 2024, 17:35:14
 :) :) :) :) ;D ;D ;D ;D
Mno, co na to říct. To zenity je to nejjednodušší co vlastně existuje. @Ventero zkus si něco naprogramovat sám, jen nějakou blbůstku a uvidíš co to je za mazec. A na úrovni WM ještě větší.
S TK nějaké zkušenosti mám (https://stackoverflow.com/questions/68879210/how-to-add-a-button-in-a-toplevel-window/68879554#68879554).
Pokud chceš fakt něco hodně jednoduchého, univerzálnějšího bez zenity omezení, tak bude nejjednodušší si to napsat jako web a socketem ovládat. Pomocí node.js to jde docela dobře. Ale pořád to bude o řád více práce než se zenity.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: Ventero 27 Října 2024, 19:11:38
Jojo - vim. Kolikrat staci slozitejsi konfigurace Grub2.
Jde mi o to, jak to gui okno udelat nezavisle na prostredi a na dalsich rekvizitach, aby se to dalo spustit nejlepe napric distry (alespon deb-based) bez ohledu na DE a bez nutnosti instalovat dalsi veci, at uz je to Zenity, Python atd.
Neco, co proste hned spustim at uz v Ubuntu, Kubuntu, Xubuntu, Debianu atp.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 27 Října 2024, 22:32:04
Jojo - vim. Kolikrat staci slozitejsi konfigurace Grub2.
Jde mi o to, jak to gui okno udelat nezavisle na prostredi a na dalsich rekvizitach, aby se to dalo spustit nejlepe napric distry (alespon deb-based) bez ohledu na DE a bez nutnosti instalovat dalsi veci, at uz je to Zenity, Python atd.
Neco, co proste hned spustim at uz v Ubuntu, Kubuntu, Xubuntu, Debianu atp.
Vždycky budeš muset něco nainstalovat. To zenity běží ve všem co jsi vzpomenul. On bash není určen na gui aplikace. Proto bude muset být propojen přes nějakého prostředníka. Pokaždé budeš muset nainstalovat nějakou podporu. Záleží jen na tvůrci jaký jazyk je mu nejbližší.

Buď nechápu o co ti jde. Nebo ty nechápeš že ...

Pokud nechceš TK, je hodně dobrá volba pyglet: https://pyglet.org/ Vlastně je to lepší volba.
Je to hodně rychlé, běží to jak na X tak Waylandu. Učil jsem na tom sinus cosinus, formou ovládání otáčení autíčka. Vysvětloval jsem na tom jak je i ta základní matematika důležitá i jen na takovou blbinku jako je otáčení autíčka ve hrách z ptačí perspektivy. Ale jako každá pythoní věc se to musí potento... Hned v úvodu https://github.com/pyglet/pyglet je vidět velká bolest pythonu. Mění se API a něco nemusí fungovat. Proto v pythonu píšu už jen maximálně když něco potřebuju rychle, ale ne na dlouho. Zkrátka držím se od něho dál.

Pak je napříč X a Waylandem https://love2d.org/
Také dost dobré a navíc pro jazyk LUA. Jazyk vznikl pro neprogramátory. Dá se dobře naroubovat skoro do všeho, protože má hodně mrňavý preprocesor. V jazyce lua je naprogramován best texťák neovim. Lua je v conky, yazi, snad všude.

Pak tu máme mega počiny typu GNOME: https://developer.gnome.org/documentation/tutorials.html nebo KDE https://develop.kde.org/hig/
Tohle byli příklady knihoven které tě odstíní od low levelu. Vynechal jsem schválně GTK4 a další.

Jupí na nižší věci: https://wayland-book.com/introduction.html nebo konkurece z X https://en.wikibooks.org/wiki/OpenGL_Programming# oboje pro C++ (skvělý, všestranný jazyk). Anebo https://medium.com/@dbiro97/understanding-linux-graphical-stack-by-creating-a-window-7f82182ee19 Příklad v rustu. Rust je teď můj favorit. Ještě s ním bojuju, ale líbí se mi ta rychlost a univerzálnost. Jen je třeba u tohoto jazyka jinak přemýšlet.

Takhle jsi to myslel s nezávislostí na DE? Věci z GNOME ti pofrčí tak i tak na KDE a naopak také. Lowlevel X ti poběží kdekoliv kde bude Xserver a lowlevel Wayland kdekoliv kde bude Wayland server.
Ale ať si z toho vybereš cokoliv a zvládneš to, určitě na to nebudeš roubovat nějaký bash skript. To už si nativně nasmolíš přímo v příslušném jazyce.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: Roman Vacho 28 Října 2024, 10:53:50
Taky přisypu:
vychází ze Zenity
https://sourceforge.net/projects/yad-dialog/

A tady máš něco od Basicu, kdybys měl nostalgickou...
https://gambas.sourceforge.net/en/main.html

Nebo provařený QT Creator...

Anebo nahoď bakšiš a seženu dělníka, který s tím má zkušenosti v Lin a Win a je levný.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: Ventero 28 Října 2024, 12:21:16
Yad byl právě použit v tom grubdoctor, jak jsem odkazoval a tím, že ze Zenity vychází fungoval ten přímý přepis.
jen mě mrzí, že nejdou udělat záložky. To je za mě to Zenity nedotáhlé.
Moje představa je asi taková, že se udělá stejné okno jako když spustím např. Network manager.

A Pythonu se právě chci vyhnout - to jde vidět na hp-lip, že to není zrovna spolehlivé řešení a cesta pekelná.

Takže, jestli jsem pochopil dobře, tak to jde jedině přímo jako GTK (tedy asi nějaký GTK Creator) a to je příliš složité ..

Jinak to tcl/tk - u toho někde psali, že to pak spustíš nezávisle na čemkoliv a jinde, že je třeba doinstalovat to "tk" ..

A ten Tkinter je zase via Python.

Edit:
Aha "Většina operačních systémů Linux je dodávána s vestavěným Tcl a v těchto systémech můžete okamžitě začít."
https://www.tutorialspoint.com/tcl-tk/tcl_environment.htm

Ale ještě jsem nenašel, jestli v tcl/tk jdou udělat ty záložky. Ale tím, že to volá wm (chápu jako windows manager), tak by to jít mělo ..

Ono to možná půjde nějak i v tom Zenity, když se to šikovně navlíkne. Ale i to už je pro mě složité se tím prokousávat a učit se programovat ..
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: Ventero 28 Října 2024, 13:07:32
Tady je super tutoriál pro Zenity. Akorát, že u všeho pak jen lakonicky připíšou "výstup je třeba přiřadit proměnné"a "výstupovou logiku dále použít" atp., což je zase pro neznalce nicmoc, bo neví jak. A pak se naučit syntaxi těch podmínek a proměnných. To by zase zabralo času ..
https://ostechnix.com/zenity-create-gui-dialog-boxes-in-bash-scripts/

Něco pak napoví zase jiné ukázky jinde - např.:
https://www.tomshardware.com/software/linux/how-to-create-a-custom-linux-app-menu-with-zenity

Takže takhle toho hromadu pročíst, prozkoušet - no hotový koníček, na který mi tedy fakt moc nezbývá ..
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: Roman Vacho 28 Října 2024, 13:13:19
A co TUI, nebude stačit?
https://youtu.be/FJ7KJXmZRXA?t=782 (https://youtu.be/FJ7KJXmZRXA?t=782)

https://unix.stackexchange.com/questions/285777/how-do-i-create-a-terminal-based-gui
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 28 Října 2024, 23:52:10
Tady je super tutoriál pro Zenity. Akorát, že u všeho pak jen lakonicky připíšou "výstup je třeba přiřadit proměnné"a "výstupovou logiku dále použít" atp., což je zase pro neznalce nicmoc, bo neví jak. A pak se naučit syntaxi těch podmínek a proměnných. To by zase zabralo času ..
https://ostechnix.com/zenity-create-gui-dialog-boxes-in-bash-scripts/

Něco pak napoví zase jiné ukázky jinde - např.:
https://www.tomshardware.com/software/linux/how-to-create-a-custom-linux-app-menu-with-zenity

Takže takhle toho hromadu pročíst, prozkoušet - no hotový koníček, na který mi tedy fakt moc nezbývá ..

Tak já teda ten můj script okomentuji:
*Shebank
#! /usr/bin/env bash

*Nastavení proměnné která bude uchovávat návratovou hodnotu (exit) ze Zenity
*Rovnou ji přednastavíme na úspěch
navrat=1

*Smyčka která testuje tu návratovou hodnotu. Pokud to bude jednička, smyčka se zopakuje a otevře okno Zenity
while [ $navrat -eq 1 ]; do

*A tady nastává to kouzlo a přiřazuje se výstup/výběr do proměnné s názvem odpoved
*Zenity se spustí v subshelu
odpoved=$(zenity --info --title 'Moje okno' \
      --text 'Vyber si:' \
      --extra-button "První sekvence" \
      --extra-button "Ty ty ty zlobivý porte" \
      --extra-button TRETI \
      --ok-label Storno\
       )
*Do proměnné navrat se zapíše návratová hodnota předchozího příkazu
*což je subshel se zenity
navrat=$?

*Testy odpovědí = výstupová logika
case $odpoved in
"První sekvence") ./a.sh
    ;;
"Ty ty ty zlobivý porte") ./b.sh
    ;;
TRETI) ./c.sh
    ;;

*Ukončení testu case
esac

*Návrat smyčky. Pokud bude proměnná navrat mít  hodnotu nula
*znamená to že se kliklo na tlačítko ok-label s mnou přiřazeným názvem Storno
*smyčka se zde ukončí
done

Ta syntaxe je jen bash, nic jiného.
Vážně by mě zajímalo, a myslím fakt vážně. Jak by sis představoval aby to fungovalo? A tím nemyslím "chci záložky"! Tím myslím co ty jako uživatel bys chtěl napsat a ono se to bude podle toho chovat.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: Ventero 29 Října 2024, 15:19:20
Jde mi v podstatě o totéž, co psal Roman - zjednodušení a zkrácení času. Akorát mi šlo o širší možnost to strukturovat a rozvětvit, aby to bylo stále přehledné. A ne aby to vypadalo, jako Clonezilla, Testdisk apod. Tedy udělat nějaké GUI prostředí/rozhraní pro kombinované spouštění jednotlivých utilit a skriptů s tím, že by je to sjednocovalo, bylo to přehledné a nemuselo se to všechno vypisovat v terminálu. A to tak, že tam ale půjdou volit parametry z nějaké nabídky (předepsaný paramlist) a příp. ještě dopsat.
A proto jsem vzpomněl záložky. Stejně tak třeba rozbalovací nabídka. Abych nespouštěl tupě skripty, ale měl možnost tam zadávat hodnoty, určovat zdroj/cíl apod. Jinak nemám úplně konkrétní představu ani nemůžu - ta by se vyvrbila, až bych tu slátaninu tvořil.

Ale v pohodě - když by se to člověk schopně naučil s tím Zenity, tak by se to dalo udělat celkem uspokojivě. I kdyby tak, že by se udělal soubor jednotlivých oken pro každou utilitu zvlášť a pak se to jen zastřešilo jedním generálním rozcestníkovým oknem. Akorát pak zajistit, aby se to pak nějak vrátilo k tomu hlavnímu rozhranní. Ostatně takto byly koncipovány některé vypalovací aplikace např.

U mě bude problém hlavně to samotné programování. Kdysi jsem něco psal v Basic, ale to je úplně jiná logika struktury, než dnešní zápisy. Dnes je spousta operandů v syntaxi a mě to přijde trochu nepřehledné.
Třeba když porovnám Grub1 (ještě lépe grub4dos třeba) a Grub2 - závorky, středníky, složené závorky, rovná lomítka apod. - to si prostě nejsem schopný pamatovat a přijde mi to spíše zmatečné - nevím čemu to prospělo, ale zjednodušení a přehlednosti zápisu rozhodně ne. Snad jedině, že to ušetří znaky a zápis to zkrátí - ale tím si taky nejsem jist, zda to platí vždy ..

Dík moc za zájem, ale kašli na to, vnímám čímdálvíc, kolik by to dalo práce i přes to, že bych to byl schopen realizovat. Jen jsem měl nějakou vizi, a po prvním seznámení s fakty (díky Tobě i) vím, že na to nejspíše nemám energii a asi ani dost prostoru.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 30 Října 2024, 18:49:34
Ramaeli, prosím ještě o další pomoc... O co jde:

mám dle Tvého mustru víceméně finální kód pro Zenity, kde spouštím jednotlivé subskripty. Vše funguje, až na tlačítko "SOUBOR", kterým se spustí subskript pro odeslání textového testovacího souboru.

Testovací soubor je úmyslně značně velký a tím i jeho odesílání trvá dlouho (asi 1040 vteřin), přičemž ale hned po stisknutí tlačítka "SOUBOR" dojde k nežádoucímu zavření okna Zenity (procesy bash a cat zůstanou běžet na pozadí). Ostatní tlačítka (pochopitelně kromě Storna) okno nezavřou...

Všechny použité skripty a soubory jsou v příloze. Mám (zcela laický) dojem, že k zavření (či vlastně pádu?) okna dochází právě proto, že subskript neproběhne v dostatečně krátkém čase...

Díky.

Edit: tak jsem ten textový testovací soubor zkusil cca 400x zmenšit a chová se to tak, že okno Zenity zmizí na dobu odesílání souboru po RS232, načež se zase znovu objeví (čili ve skutečnosti se nezavře definitivně, ani nespadne, jen bych prostě u nezmenšeného souboru musel čekat těch cca 1040 vteřin).

Je tohle chování Zenity normální, resp. dá se tomu nějak zabránit?
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 30 Října 2024, 18:53:54
Tukam z mobilu v praci. Ano okno se objevi az po dokonceni riidici logiky. Dej za spoustene skripty & Tim by se meli spustit na pozadi a nebude se na ne cekat.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 30 Října 2024, 21:16:01
Jo, okno se po přidání &  už nezavírá, skvělé. Přesná syntaxe je
Kód: [Vybrat]
./konkretni_skript.sh & (to jen kvůli mezerám a kolik, kdo to má vědět ;-) )

Nově se (asi logicky?) okno zavřelo po stisku tlačítka "SOUBKONEC", protože se příslušným subskriptem zabíjely procesy cat a bash, ale to jsem vyřešil omezením na zabití cat, takže teď už se zdá, že to dělá všechno co má...

Díky moc.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 31 Října 2024, 00:36:30
Není zač.
Ještě doplním že si můžeš uložit pid procesu na pozadí a ten dle potřeby zabít. To jen aby sis zbytečně nezabíjel všechny caty a bashe atd.
Otestuj si to:
Kód: [Vybrat]
./testodeslsoub.sh &
POSLEDNI_PID=$!
kill -9 $POSLEDNI_PID
No a ještě doporučuju ten shebank napsat již spousty let po novu:
Kód: [Vybrat]
#!/usr/bin/env bash
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 31 Října 2024, 10:48:46
Ramael: jo, já jsem taky uvažoval o zabití dle konkrétního PID, ale popravdě moc nechápu funkci toho kódu, co jsi poslal výše (tím spíš, že je nějak spojený se subskriptem testodeslsoub.sh - ten se napřed spustí a pak hned zabije???).

Smyslem subskriptu testkonecodesl.sh je ukončit cat (předtím spuštěný subskriptem testodeslsoub.sh), pokud přenos trvá příliš dlouho (ale myslím, že Tobě to je jasné)...

Při experimentech s PID se trochu obávám, aby se PID nějak nezměnil, chybně určil apod. a nezabilo se něco jiného. Proces cat s největší pravděpodobností poběží vždy jen jeden (ten spuštěný subskriptem testodeslsoub.sh), čili nebude moc hrozit, že by se zabily i nějaké další. Místo pkill jsem nyní použil killall, aby to "náhodou" nezabilo i jiný proces s názvem obsahujícím podřetězec "cat" (pokud správně chápu výklad funkce pkill).

Ten shebang jsem už včera přepsal podle toho, jak to máš (tedy "po novu", jakkoliv novinky čím dál víc nesnáším), někde jsem se dočetl, že to nějak usnadňuje hledání proměnných či co. No prostě pracuje mi to i s tímto "po novu" způsobem...
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 31 Října 2024, 11:19:06
Kousek z řídící logiky
Kód: [Vybrat]
SOUBOR) ./testodeslsoub.sh &
    PID_NA_ZABITI=$!
    # uloží se pid posledního skriptu spuštěného na pozadí
    # takže si ten pid uložíme hned po spuštění
     ;;
 SOUBKONEC) kill -9 $PID_NA_ZABITI
    # místo stop skriptu rovnou zamorduje skript ./testodeslsoub.sh
     ;;
Ten pid se v rámci běžícího procesu nemění. Bude jiný až při dalším spuštění. A tak se hodnota pidu uloží hned po spuštění. A pak už můžeš proces(skript) kontrolovat pomocí té proměnné.

"Po novu" už je to více jak deset let :)
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 31 Října 2024, 13:43:02
Díky, takhle už je kód jasnější, zkusím to tam změnit.

Edit: vyzkoušeno, bohužel verze s pid nezastaví odesílání souboru (zabije to totiž jen proces bash a cat zůstane v běhu). Asi by se musely identifikovat pidy jak bash, tak cat (při spuštění subskriptem přímo v něm) a zabít je pak v hlavním skriptu oba, ne?

Ale nemusíme to hrotit, ta verze s killall cat funguje, jak už jsem psal výše a pro moje účely úplně stačí.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 01 Listopadu 2024, 23:19:47
No jo no, chybička se vloudila. Takže oprava:
Kód: [Vybrat]
SOUBKONEC) pkill -9 -P $PID_NA_ZABITI
Z man stránky:
Kód: [Vybrat]
man --pager='less -p "-P,"' pkill
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 01 Listopadu 2024, 23:28:02
@Ventero ten YAD vypadá hodně dobře. Tady je to co chceš: https://yad-guide.ingk.se/notebook/yad-notebook.html
Protože Bash není zrovna moc intuitivní jazyk. Je určen na správu systému, proto krkolomná syntaxe. Tak ti přeju ať tě nepostihne šílenství při vytváření si vlastního GUI.
Myslím že by bylo lepší se naučit nějaký normální programovací jazyk.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: Ventero 02 Listopadu 2024, 08:18:31
Diky. Mrknu na to
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 02 Listopadu 2024, 20:34:32
Díky za opravu, takhle už to zabije bash i cat, ale nesmí se (třeba omylem) stisknout tlačítko SOUBOR víckrát. To se pak catů i bashů spustí několik a tlačítkem SOUBKONEC se dá zabít pouze jedna dvojice (logicky).

Když nezabíjím dle pidu, ale dle názvu, tak to funguje lépe (prostě to zabije - třeba i postupně - všechny procesy bash a cat).

Mně je jasné, že by tam asi šlo postupně načítat více pidů dle počtu (nechtěných) spuštění, ale vážně to nemá smysl dál komplikovat, mně ta funkce verze s killall dle názvu zcela vyhovuje. Leda že bys to měl jako dobrovolné mozkové cvičení ;-)

No jo no, chybička se vloudila. Takže oprava:
Kód: [Vybrat]
SOUBKONEC) pkill -9 -P $PID_NA_ZABITI
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 03 Listopadu 2024, 07:22:23
To znělo jako výzva :))
Kód: [Vybrat]
SOUBOR)
    # Pokud už není PID, spusť skript
    # Předejde se vícenásobnému spuštění
    if [[ ! $PID_NA_ZABITI ]]; then
      # skript je spuštěn na pozadí.
      # Po ukončení se automaticky vymaže proměnná PIDu
      ./testodeslsoub.sh & PID_NA_ZABITI=
      # Ale než se ukončí, nastavíme proměnnou na jeho PID
      PID_NA_ZABITI=$!
    fi
    ;;
  SOUBKONEC)
    # Test jestli existuje spuštěný proces
    # Jinak bysme mohli zabít komplet DE - vlastní
    # zkušenost je těžko přenositelná :D
    if [[ $PID_NA_ZABITI ]]; then
      # Výpis všech potomků zabíjeného skriptu
      # A rovnou jejich zabití - tím se skript ukončí
    pstree -A -p $PID_NA_ZABITI | grep -Eow "[0-9]+" | xargs kill
    # Vymazání hodnoty PIDu
    PID_NA_ZABITI=
    fi
    ;;
On totiž i ten pkill není tak dokonalý jak se tváří.
Takhle je to ošetřené proti ukliknutím.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 04 Listopadu 2024, 12:19:28
Potvrzuju funkci po této poslední opravě, jsi vážně dobrej, díky.

Edit: hm, tak zase to není úplně ono ;-) Pokud nechám přenos souboru doběhnout přirozeně do konce (tedy nezabiju ho tlačítkem SOUBKONEC), tak nelze spustit nový přenos. Tlačítko SOUBOR "nějak" zareaguje (obvyklým zmizením okna Zenity na velmi krátký okamžik), ale to je všechno... Zatím jsem se nedíval do správce procesů, co běží a co ne.

Edit #2: tak běžet zůstane pouze jeden bash (ten, co v něm bylo spuštěno okno Zenity), bash i cat pocházející ze subskriptu pro přenos se zabijí. Nicméně přenos souboru nelze spustit znovu (po zavření okna a novém spuštění už ano).

Edit #3: pomůže, když tlačítko SOUBKONEC stisknu i poté, co přenos doběhl přirozeně (resp. přes to). Ve správci procesů ale není přitom vidět žádná změna...

Původní verze s killall a jmény procesů tímto neduhem netrpí.

Neber to jako výzvu, jen prostě popisuju realitu.

Doplňuju příslušný kód:

Kód: [Vybrat]
#! /usr/bin/env bash
# autor principu: ramael (https://forum.ubuntu.cz/index.php?topic=86616.0)
# úprava vedoucí k zabití celého skriptu místo procesu cat

navrat=1
while [ $navrat -eq 1 ]; do
odpoved=$(zenity --ellipsize --info --title "Test panelu GERCOM" \
      --text="Zvolte funkci (režim SETUP je nutno ukončit vypnutím panelu!)" \
      --extra-button MAZÁNÍ \
      --extra-button MOŽNOSTI \
      --extra-button VYPLŇH \
      --extra-button SETUP \
      --extra-button SOUBOR \
      --extra-button SOUBKONEC \
      --ok-label ZAVŘÍT_OKNO\
       )
  navrat=$?

# Testy odpovědí
case $odpoved in
MAZÁNÍ) ./testmaz.sh &
    ;;
VYPLŇH) ./testh.sh &
    ;;   
MOŽNOSTI) ./testmozn.sh &
    ;;
SETUP) ./testsetup.sh &
    ;;
SOUBOR)
    # Pokud už není PID, spusť skript
    # Předejde se vícenásobnému spuštění
    if [[ ! $PID_NA_ZABITI ]]; then
      # skript je spuštěn na pozadí.
      # Po ukončení se automaticky vymaže proměnná PIDu
      ./testodeslsoub.sh & PID_NA_ZABITI=
      # Ale než se ukončí, nastavíme proměnnou na jeho PID
      PID_NA_ZABITI=$!
    fi
    ;;
  SOUBKONEC)
    # Test jestli existuje spuštěný proces
    # Jinak bysme mohli zabít komplet DE - vlastní
    # zkušenost je těžko přenositelná :D
    if [[ $PID_NA_ZABITI ]]; then
      # Výpis všech potomků zabíjeného skriptu
      # A rovnou jejich zabití - tím se skript ukončí
    pstree -A -p $PID_NA_ZABITI | grep -Eow "[0-9]+" | xargs kill
    # Vymazání hodnoty PIDu
    PID_NA_ZABITI=
    fi
    ;;
esac
done
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 06 Listopadu 2024, 21:34:31
No jo, jsou věci...
A pak jsou opravy:
Kód: [Vybrat]
SOUBOR)
    # Pokud už není PID, spusť skript
    # Předejde se vícenásobnému spuštění
    if [[ ! $PID_NA_ZABITI ]] || [ ! -d /proc/$PID_NA_ZABITI ]; then
      # skript je spuštěn na pozadí.
      ./testodeslsoub.sh &
      # Nastavíme proměnnou na jeho PID
      PID_NA_ZABITI=$!
    fi
    ;;
A ještě pro jistotu:
začátek skriptu:
Kód: [Vybrat]
#! /usr/bin/env bash

PID_NA_ZABITI=
navrat=1
while [ $navrat -eq 1 ]; do
...
...
...
a konec skriptu:
Kód: [Vybrat]
...
...
...
esac

done
if [[ $PID_NA_ZABITI ]]; then
  pstree -A -p $PID_NA_ZABITI | grep -Eow "[0-9]+" | xargs kill
fi
Ty jo, teď už je to kompletně ošetřený. Přidal jsem ještě, že když ukončíš okno, tak to taky zabije ty procesy.

Jak už jsem psal výše, bash není nejlepší jazyk na psaní a obsluhu grafického rozhraní. A řekl bych, že díky jeho složité (krkolomné) syntaxi má pak dost lidí zbytečný strach z normálních programovacích jazyků.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 07 Listopadu 2024, 10:56:12
Můžu Tě požádat, abys ty všechny změny doplnil do předposlední verze skriptu tak, jak jsem ji (pro změnu já) doplnil do předchozího příspěvku?

Ta přehlednost je pro mě totiž opravdu nulová, nebo spíš záporná...
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 07 Listopadu 2024, 16:36:20
Kód: [Vybrat]
#! /usr/bin/env bash
# úprava vedoucí k zabití celého skriptu místo procesu cat

PID_NA_ZABITI=
navrat=1
while [ $navrat -eq 1 ]; do
odpoved=$(zenity --ellipsize --info --title "Test panelu GERCOM" \
      --text="Zvolte funkci (režim SETUP je nutno ukončit vypnutím panelu!)" \
      --extra-button MAZÁNÍ \
      --extra-button MOŽNOSTI \
      --extra-button VYPLŇH \
      --extra-button SETUP \
      --extra-button SOUBOR \
      --extra-button SOUBKONEC \
      --ok-label ZAVŘÍT_OKNO\
       )
  navrat=$?

# Testy odpovědí
case $odpoved in
MAZÁNÍ) ./testmaz.sh &
    ;;
VYPLŇH) ./testh.sh &
    ;;   
MOŽNOSTI) ./testmozn.sh &
    ;;
SETUP) ./testsetup.sh &
    ;;
SOUBOR)
    # Pokud už není PID, spusť skript
    # Předejde se vícenásobnému spuštění
      if [[ ! $PID_NA_ZABITI ]] || [ ! -d /proc/$PID_NA_ZABITI ]; then
      # skript je spuštěn na pozadí.
      ./testodeslsoub.sh &
      # nastavíme proměnnou na jeho PID
      PID_NA_ZABITI=$!
    fi
    ;;
  SOUBKONEC)
    # Test jestli existuje spuštěný proces
    # Jinak bysme mohli zabít komplet DE - vlastní
    # zkušenost je těžko přenositelná :D
    if [[ $PID_NA_ZABITI ]]; then
    # Výpis všech potomků zabíjeného skriptu a jejich zamordování
    pstree -A -p $PID_NA_ZABITI | grep -Eow "[0-9]+" | xargs kill
    # Vymazání hodnoty PIDu
    PID_NA_ZABITI=
    fi
    ;;
esac
done
# Smyčka byla ukončena. Pokud je ještě skript aktivní
# zamordujem jeho potomky včetně něho samotného
if [[ $PID_NA_ZABITI ]]; then
  pstree -A -p $PID_NA_ZABITI | grep -Eow "[0-9]+" | xargs kill
fi
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 07 Listopadu 2024, 19:46:41
Tak snad už naposledy za toto díky.

Zdá se, že to už opravdu dělá korektně všechno tak, jak má...
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 07 Listopadu 2024, 22:27:10
Nemáš zač.
Mne tyhle věci posouvají dál. A tohle bylo k závěru hodně zajímavé. Vybrat si cestu jakou se dát. Nakonec jsem se rozhodl pro build-in test -d než ps, grep a testy výsledků. Šlo by to udělat i pomocí trap, jenže to bys musel vložit do skriptu který má být pod kontrolou. Ale to odporuje mému přesvědčení o umístění a nedelegování řídící logiky na věci které mají v podstatě vykonávat jen na co byly prvoplánovány.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 26 Listopadu 2024, 23:46:55
Tak jsem dnes zjistil ještě jednu chybku - není zásadní, ale... Okno Zenity nelze zavřít normálně křížkem, ale je potřeba zvolit funkci "ZAVŘÍT_OKNO".

To je normální?

Dělají to i dřívější verze uvedené v tomto vlákně.

Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 29 Listopadu 2024, 19:32:00
Kód: [Vybrat]
#! /usr/bin/env bash

odpoved=$(zenity --info --title 'Moje okno' \
      --text 'Vyber si:' \
      --extra-button PRVA \
      --extra-button DRUHA \
      --extra-button TRETI \
      --extra-button CTVRTA \
      --ok-label Storno\
       )
  navrat=$?

# Test návratové hodnoty
if [ $navrat -eq 0 ]; then
  exit 0
fi

# Testy odpovědí
case $odpoved in
  PRVA) echo "$odpoved jsi si vybral"
    echo "Ty dva oddělovací středníky jsou důležité"
    ;;
  DRUHA) echo "Fakt chceš dvojku?"
    ;;
  TRETI) echo "$odpoved - tak ta se ti vymstí"
    ;;
  CTVRTA) echo "$odpoved je ta správná volba. Už jsi profík :D"
    ;;
esac

Myslím, že je to dost názorně napsáno, takže vzhůru do úprav. Na ten script si udělej spouštěč na ploše a hotovo.
Tenhle také nejde zavřít křížkem? Bohužel to nemohu odzkoušet, protože moje DE na oknech křížky a podobné ptákoviny nedělá.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 29 Listopadu 2024, 20:26:08
Jo, ten zavřít křížkem lze ;-)

Příležitostně se podívám, kde je rozdíl a zkusím to v tom smyslu změnit... Zatím mi neprozrazuj nic, musím trochu potrénovat mozek ;-)

Díky.

Edit #1: tak odvolávám, co jsem odvolal a vzdávám vlastní pokusy. Jen si tipnu: nedělá tu nemožnost zavření křížkem ten Tebou popsaný princip testu, zda neexistuje spuštěný proces?
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 29 Listopadu 2024, 20:31:17
Kód: [Vybrat]
#! /usr/bin/env bash
# úprava vedoucí k zabití celého skriptu místo procesu cat

PID_NA_ZABITI=
navrat=1
while [ $navrat -eq 1 ]; do
odpoved=$(zenity --ellipsize --info --title "Test panelu GERCOM" \
      --text="Zvolte funkci (režim SETUP je nutno ukončit vypnutím panelu!)" \
      --extra-button MAZÁNÍ \
      --extra-button MOŽNOSTI \
      --extra-button VYPLŇH \
      --extra-button SETUP \
      --extra-button SOUBOR \
      --extra-button SOUBKONEC \
      --ok-label ZAVŘÍT_OKNO\
       )
  navrat=$?
# Test návratové hodnoty
if [ $navrat -eq 0 ]; then
if [[ $PID_NA_ZABITI ]]; then
  pstree -A -p $PID_NA_ZABITI | grep -Eow "[0-9]+" | xargs kill
fi
  exit 0
fi
# Testy odpovědí
case $odpoved in
MAZÁNÍ) ./testmaz.sh &
    ;;
VYPLŇH) ./testh.sh &
    ;;   
MOŽNOSTI) ./testmozn.sh &
    ;;
SETUP) ./testsetup.sh &
    ;;
SOUBOR)
    # Pokud už není PID, spusť skript
    # Předejde se vícenásobnému spuštění
      if [[ ! $PID_NA_ZABITI ]] || [ ! -d /proc/$PID_NA_ZABITI ]; then
      # skript je spuštěn na pozadí.
      ./testodeslsoub.sh &
      # nastavíme proměnnou na jeho PID
      PID_NA_ZABITI=$!
    fi
    ;;
  SOUBKONEC)
    # Test jestli existuje spuštěný proces
    # Jinak bysme mohli zabít komplet DE - vlastní
    # zkušenost je těžko přenositelná :D
    if [[ $PID_NA_ZABITI ]]; then
    # Výpis všech potomků zabíjeného skriptu a jejich zamordování
    pstree -A -p $PID_NA_ZABITI | grep -Eow "[0-9]+" | xargs kill
    # Vymazání hodnoty PIDu
    PID_NA_ZABITI=
    fi
    ;;
esac
done
# Smyčka byla ukončena. Pokud je ještě skript aktivní
# zamordujem jeho potomky včetně něho samotného
if [[ $PID_NA_ZABITI ]]; then
  pstree -A -p $PID_NA_ZABITI | grep -Eow "[0-9]+" | xargs kill
fi
Snad opraveno.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 29 Listopadu 2024, 20:36:05
...
Snad opraveno.

Bohužel ani toto nelze zavřít křížkem...
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 29 Listopadu 2024, 20:37:36
Jo, ten zavřít křížkem lze ;-)

Příležitostně se podívám, kde je rozdíl a zkusím to v tom smyslu změnit... Zatím mi neprozrazuj nic, musím trochu potrénovat mozek ;-)

Díky.

Edit #1: tak odvolávám, co jsem odvolal a vzdávám vlastní pokusy. Jen si tipnu: nedělá tu nemožnost zavření křížkem ten Tebou popsaný princip testu, zda neexistuje spuštěný proces?
A sakra, jsem to postnul aniž bych zaregistroval že to chceš zkusit najít sám.
Ne, dělala to nekontrola návratové hodnoty zenity. Jsem ji vypustil v dobré víře. Nějak mě nedošlo, že lidi mají okna s křížkama ap. Moje chyba.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 29 Listopadu 2024, 20:53:21
To mi nedává smysl. Anebo mám už za tento týden v hlavě dost nak..áno.
Kód: [Vybrat]
#! /usr/bin/env bash
# úprava vedoucí k zabití celého skriptu místo procesu cat

PID_NA_ZABITI=
navrat=1
while [ $navrat -eq 1 ]; do
odpoved=$(zenity --ellipsize --info --title "Test panelu GERCOM" \
      --text="Zvolte funkci (režim SETUP je nutno ukončit vypnutím panelu!)" \
      --extra-button MAZÁNÍ \
      --extra-button MOŽNOSTI \
      --extra-button VYPLŇH \
      --extra-button SETUP \
      --extra-button SOUBOR \
      --extra-button SOUBKONEC \
      --ok-label ZAVŘÍT_OKNO\
       )
  navrat=$?
# Test návratové hodnoty
if [ $navrat -eq 0 ]; then
  exit 0
fi
# Testy odpovědí
case $odpoved in
MAZÁNÍ) ./testmaz.sh &
    ;;
VYPLŇH) ./testh.sh &
    ;;   
MOŽNOSTI) ./testmozn.sh &
    ;;
SETUP) ./testsetup.sh &
    ;;
SOUBOR)
    # Pokud už není PID, spusť skript
    # Předejde se vícenásobnému spuštění
      if [[ ! $PID_NA_ZABITI ]] || [ ! -d /proc/$PID_NA_ZABITI ]; then
      # skript je spuštěn na pozadí.
      ./testodeslsoub.sh &
      # nastavíme proměnnou na jeho PID
      PID_NA_ZABITI=$!
    fi
    ;;
  SOUBKONEC)
    # Test jestli existuje spuštěný proces
    # Jinak bysme mohli zabít komplet DE - vlastní
    # zkušenost je těžko přenositelná :D
    if [[ $PID_NA_ZABITI ]]; then
    # Výpis všech potomků zabíjeného skriptu a jejich zamordování
    pstree -A -p $PID_NA_ZABITI | grep -Eow "[0-9]+" | xargs kill
    # Vymazání hodnoty PIDu
    PID_NA_ZABITI=
    fi
    ;;
esac
done
# Smyčka byla ukončena. Pokud je ještě skript aktivní
# zamordujem jeho potomky včetně něho samotného
if [[ $PID_NA_ZABITI ]]; then
  pstree -A -p $PID_NA_ZABITI | grep -Eow "[0-9]+" | xargs kill
fi
A takhle? To asi křížkem půjde, ale neukončí spuštěný proces (ten křížek).
Pokud tohle křížkem půjde, dej vědět a já zkusím vymyslet jak přidat ukončení procesů ke křížku.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 29 Listopadu 2024, 22:01:25
Ne, zase to křížkem zavřít nejde.

Hele netrap se, nemá to smysl (nestojí to za to úsilí), bez křížku to taky funguje a já jsem spokojený.

Díky.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 30 Listopadu 2024, 17:23:10
Kód: [Vybrat]
#! /usr/bin/env bash
# úprava vedoucí k zabití celého skriptu místo procesu cat

PID_NA_ZABITI=
navrat=1
while [ $navrat -eq 1 ]; do
odpoved=$(zenity --ellipsize --info --title "Test panelu GERCOM" \
      --text="Zvolte funkci (režim SETUP je nutno ukončit vypnutím panelu!)" \
      --extra-button MAZÁNÍ \
      --extra-button MOŽNOSTI \
      --extra-button VYPLŇH \
      --extra-button SETUP \
      --extra-button SOUBOR \
      --extra-button SOUBKONEC \
      --ok-label ZAVŘÍT_OKNO\
       )
  navrat=$?
# Test návratové hodnoty
if [ $navrat -eq 0 ]; then
if [[ $PID_NA_ZABITI ]]; then
  pstree -A -p $PID_NA_ZABITI | grep -Eow "[0-9]+" | xargs kill
fi
  exit 0
fi
# Testy odpovědí
case $odpoved in
MAZÁNÍ) ./testmaz.sh &
    ;;
VYPLŇH) ./testh.sh &
    ;;   
MOŽNOSTI) ./testmozn.sh &
    ;;
SETUP) ./testsetup.sh &
    ;;
SOUBOR)
    # Pokud už není PID, spusť skript
    # Předejde se vícenásobnému spuštění
      if [[ ! $PID_NA_ZABITI ]] || [ ! -d /proc/$PID_NA_ZABITI ]; then
      # skript je spuštěn na pozadí.
      ./testodeslsoub.sh &
      # nastavíme proměnnou na jeho PID
      PID_NA_ZABITI=$!
    fi
    ;;
  SOUBKONEC)
    # Test jestli existuje spuštěný proces
    # Jinak bysme mohli zabít komplet DE - vlastní
    # zkušenost je těžko přenositelná :D
    if [[ $PID_NA_ZABITI ]]; then
    # Výpis všech potomků zabíjeného skriptu a jejich zamordování
    pstree -A -p $PID_NA_ZABITI | grep -Eow "[0-9]+" | xargs kill
    # Vymazání hodnoty PIDu
    PID_NA_ZABITI=
    fi
    ;;
esac
done
# Smyčka byla ukončena. Pokud je ještě skript aktivní
# zamordujem jeho potomky včetně něho samotného
if [[ $PID_NA_ZABITI ]]; then
  pstree -A -p $PID_NA_ZABITI | grep -Eow "[0-9]+" | xargs kill
fi
Snad opraveno.
Nevím kde je chyba, ale sem něco poslad je očistec. Tak ještě jednou..
Tenhle script je blbost. Páč ta kontrola už tam probíhá ve smyčce while.
Jsem si nainstaloval XFCE a kupodivu se mi to tu zobrazuje stejně jako ve Waylandu, bez křížku. Takže buď je chyba v Zenity nebo DE.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: ramael 30 Listopadu 2024, 17:38:23
Uf, už jsem zpět na Waylandu - Hyprland ~ doma je doma. To odesílání asi bude spíš STARLINKem u mě. To je internet na bobek.
Snad si jednou najdu čas a dám sem návod jak si GUI udělat přes webový prohlížeč a socket. To je o hodně flexibilnější a funguje to všude.
Název: Re:GUI pro spouštění skriptů - poradí někdo?
Přispěvatel: JirkaZ 30 Listopadu 2024, 23:34:06
Úplně nevím, co jsi myslel slovy "tenhle skript je blbost"... Ten poslední?

Ať už je to tak či onak, křížkem ani ten poslední pořád zavřít nejde. Ale fakt se netrap, už jsi mi toho poradil víc než dost, díky.