[Parzialmente Risolto]Dock App Preferite e Doppi click.Possibile evitare istante multiple per determinate applicazioni ?

Configurazione e uso delle applicazioni del desktop manager predefinito a partire dalla versione 18.04 di Ubuntu.
DjDiabolik
Prode Principiante
Messaggi: 121
Iscrizione: venerdì 30 marzo 2012, 4:03

[Parzialmente Risolto]Dock App Preferite e Doppi click.Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da DjDiabolik »

**Edit del sabato 13 Aprile**
Vi rimando direttamente al reply appena fatto pochi istanti fa qua:
viewtopic.php?p=5361774#p5361774

Il post originale era poi questo:
Devo dire che mi sono aiutato con google con chiavi di ricerca tipo "Gnome disable multi instance for app" o qualcosa del genere ma mi sono fatto semplicemente confusione quindi eccomi qua:
Allora io sono su Ubuntu 22.04.4 LTS e il suo ambiente GNOME Desktop. Sulla sinistra dello schermo ho due APP (nello specifico uno è lo script di avvio dell'ecosistema Retropie e la seconda è Kodi) e per queste due APP specifiche vorrei sapere se esiste qualche impostazione o qualche sistema per evitare, per errore, che si vengano a lanciare due instante della stessa APP causa doppio click sull'icona stessa.
Spiego perchè:
Due istanze di Kodi crea semplicemente casini come riproduzioni a scatti dei video e instabilità generica sopratutto lato addons.
Due istante di "Retropie" invece causa due avvi di Emulationstation con relativi problemi di instabilità generale.

In qualche thread si dice che per esempio ci sono APP che hanno opzioni per prevenire l'avviarsi in doppia istanze tipo VLC. Parlando di Player video Kodi per esempio non sembra avere questa opzione.
Lo script di Retropie invece avvia una finestra di terminale e forse li la cosa è più complessa? Non saprei.. per questo chiedo.
Ultima modifica di DjDiabolik il sabato 13 aprile 2024, 13:51, modificato 1 volta in totale.
Avatar utente
steff
Moderatore Globale
Moderatore Globale
Messaggi: 40301
Iscrizione: domenica 18 febbraio 2007, 19:48
Desktop: LXQt+labwc
Distribuzione: Arch; Debian; Ubuntu Server
Sesso: Maschile
Località: Toscana
Contatti:

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da steff »

Lo script di Retropie invece avvia una finestra di terminale e forse li la cosa è più complessa? Non saprei.. per questo chiedo.
Uno script può fare un controllo è già in esecuzione. Per kodi si potrebbe forse fare lo stesso, avviandolo con uno script invece direttamente.
Hai fatto un backup oggi? Ieri?? Quando???
La Documentazione da consultare e la FAQ sul uso del forum
Sistemi: LXQt - semplice, modulare e configurabile + *ubuntu in Vbox
DjDiabolik
Prode Principiante
Messaggi: 121
Iscrizione: venerdì 30 marzo 2012, 4:03

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da DjDiabolik »

steff ha scritto:
giovedì 4 aprile 2024, 11:05
Lo script di Retropie invece avvia una finestra di terminale e forse li la cosa è più complessa? Non saprei.. per questo chiedo.
Uno script può fare un controllo è già in esecuzione. Per kodi si potrebbe forse fare lo stesso, avviandolo con uno script invece direttamente.
allora forse però mi sa che devo specificare una cosa.... a dire il vero, come lo chiamo io, l'ecosistema "Retropie" si avvia con un file .desktop che si va a piazzare nel dock dei preferiti.
Andando a spulciare questo preciso file posso vedere che è questo:
è su '/usr/local/share/applications/" con proprietario "root"

Codice: Seleziona tutto

[Desktop Entry]
Type=Application
Exec=gnome-terminal --full-screen --hide-menubar -e emulationstation
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[de_DE]=RetroPie
Name=rpie
Comment[de_DE]=RetroPie
Comment=retropie
Icon=/usr/local/share/icons/retropie.svg
Categories=Game
Modificare questo file .desktop non è una buona idea. Ho provato a cambiare il suo Name e mettere "RetroPie" invece di "rpie" e sembra, che ogni volta che io vado a fare i suoi aggiornamenti tramite il "Retropie_setup" script, questo file .desktop viene ricreato e quindi qualsiasi modifica fatta viene persa.
Se voglio provare ad applicare qualcosa del genere dovrò creare un launcher diverso.... da utilizzare in alternativa a questo.

Piccolo OT... nel mio becero inglese ho suggerito nel forum la stessa cosa:
https://retropie.org.uk/forum/topic/353 ... possible/1

Non sembra che a nessuno interessi sta cosa.
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 5480
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da GjMan78 »

Se vuoi modificare un file presente in /usr/local/share/applications/ fanne una copia e piazzala in ~/.local/share/applications/.

La copia nella home ha la precedenza rispetto a quella in /usr/ e non viene alterata dagli aggiornamenti.
MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
DjDiabolik
Prode Principiante
Messaggi: 121
Iscrizione: venerdì 30 marzo 2012, 4:03

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da DjDiabolik »

GjMan78 ha scritto:
domenica 7 aprile 2024, 15:54
Se vuoi modificare un file presente in /usr/local/share/applications/ fanne una copia e piazzala in ~/.local/share/applications/.

La copia nella home ha la precedenza rispetto a quella in /usr/ e non viene alterata dagli aggiornamenti.
ottima come soluzione però se poi, ad esempio cambia il file principale, io devo eventualmente accorgermi della modifica esatto ?
Cioè per capire... se poi un giorno il file su usr/local/share cambia non penso venga cambiato anche quello che io ho copiato nella cartella home esatto ?


C'è una cosa generale comunque di ubuntu in quel dock dei preferiti:
L'icona di avvio di Firefox ad esempio. Perchè se io faccio un doppio click su di essa non viene aperto un secondo Firefox ma bensi viene fatto il popup a schermo se eventualmente firefox è minimizzato ?
Anche l'icona di Thunderbird si comporta alla stessa maniera cosi come quella del Nautilus (il file manager praticamente)...

Cioè per queste tre icone se voglio lanciare una seconda istanza lo devo fare espressamente dal "Menù contestuale" del tasto destro.... che cosa cambiano in questi file .desktop rispetto a quello di Retropie ? O anche lo stesso Kodi. Posso replicare ciò che fanno le 3 icone di firefox, thunderbird e nautilus su kodi e retropie ? Credo che anche i 3 citati usino un loro .desktop o no ?
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 5480
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da GjMan78 »

DjDiabolik ha scritto:
lunedì 8 aprile 2024, 11:29
ottima come soluzione però se poi, ad esempio cambia il file principale, io devo eventualmente accorgermi della modifica esatto ?
Cioè per capire... se poi un giorno il file su usr/local/share cambia non penso venga cambiato anche quello che io ho copiato nella cartella home esatto ?
In realtà non dovrebbe mai cambiare il lanciatore, al massimo viene riscritto negli aggiornamenti.
DjDiabolik ha scritto:
lunedì 8 aprile 2024, 11:29
C'è una cosa generale comunque di ubuntu in quel dock dei preferiti:
L'icona di avvio di Firefox ad esempio. Perchè se io faccio un doppio click su di essa non viene aperto un secondo Firefox ma bensi viene fatto il popup a schermo se eventualmente firefox è minimizzato ?
Anche l'icona di Thunderbird si comporta alla stessa maniera cosi come quella del Nautilus (il file manager praticamente)...

Cioè per queste tre icone se voglio lanciare una seconda istanza lo devo fare espressamente dal "Menù contestuale" del tasto destro.... che cosa cambiano in questi file .desktop rispetto a quello di Retropie ? O anche lo stesso Kodi. Posso replicare ciò che fanno le 3 icone di firefox, thunderbird e nautilus su kodi e retropie ? Credo che anche i 3 citati usino un loro .desktop o no ?
Programmi come firefox e thunderbird integrano all'interno dell'eseguibile i dovuti controlli per verificare se un istanza sia già attiva.

Evidentemente retropie e kodi non fanno nessuna verifica ed ad ogni click viene eseguita una nuova istanza.
A questo puoi porre rimedio con un semplice script in bash che prima di lanciare il software controlli se è già in esecuzione.

Ti lascio un esempio per retropie.

Crea un file chiamato retropie.sh

Codice: Seleziona tutto

sudo nano /usr/bin/retropie.sh
Incollaci dentro questo

Codice: Seleziona tutto

#!/bin/bash
_isRunning() {
    ps -o comm= -C "$1" 2>/dev/null | grep -x "$1" >/dev/null 2>&1
}

if ! _isRunning emulationstation; then
    gnome-terminal --full-screen --hide-menubar -e emulationstation
fi

exit 0
Rendilo eseguibile

Codice: Seleziona tutto

sudo chmod +x /usr/bin/retropie.sh
Poi crea un nuovo file desktop nella home

Codice: Seleziona tutto

nano ~/.local/share/applications/retropie.desktop
con questo contenuto

Codice: Seleziona tutto

[Desktop Entry]
Type=Application
Exec=/usr/bin/retropie.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[de_DE]=RetroPie
Name=RetroPie
Comment[de_DE]=RetroPie
Comment=retropie
Icon=/usr/local/share/icons/retropie.svg
Categories=Game
Salva, aggiorna il database con

Codice: Seleziona tutto

sudo update-desktop-database
Elimina il collegamento a retropie dalla dock e ricrealo.

Have Fun!
Ultima modifica di GjMan78 il lunedì 8 aprile 2024, 13:52, modificato 2 volte in totale.
MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
DjDiabolik
Prode Principiante
Messaggi: 121
Iscrizione: venerdì 30 marzo 2012, 4:03

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da DjDiabolik »

GjMan78 ha scritto:
lunedì 8 aprile 2024, 12:41
faccio un cut cut sennò viene un quote abnorme :)
mmm... grazie per la soluzione suggerita che proverò subito appena fatto questo reply.

Allora per capire meglio... tu dici che firefox (per ora prendo come esempio solo questo per non farmi in testa troppa confusione) integra nell'eseguibile la feature per controllare se è già in esecuzione esatto ? Allora appunto se io lo minimizzo e riclicco sulla barra dock dei preferiti lui non lancia una seconda instanza ma appunto fa il popup dell'istanza precedente ? Se non sbaglio anche VideoLAN ha un settaggio e dovrebbe, se attiva questa opzione, funzionare alla stessa maniera. Esatto ?

Visto che appunto ne Retropie ne Kodi sembrano avere queste due feature io posso ovviare appunto creando questi due nuovi lanciatori.

Altrimenti c'è la soluzione forse più stupida del caso... rimuoverli dai preferiti.
Si perchè se li rimuovo dai preferiti per lanciarli devo aprire tutta la lista delle app e li come fai un click la lista appena aperta si richiude immediatamente e forse non hai nemmeno il tempo fisico per lanciare il doppio click erroneo che lancia le due istanze.

Però come detto faccio "Invia" per questo reply e provo la tua soluzione. Poi se non trovo altri reply forse stasera posterò un feedback (perchè tra un paio d'ore sono fuori casa) e ti/vi faccio sapere se è una soluzione valida e metto i TAG del caso [Risolto] nel titolo della discussione.

*EDIT Immediato*
Allora ho fatto appena adesso ciò che mi hai detto.
Appena ho creato il file .desktop ~/.local/share/applications/retropie.desktop e salvato il collegamento sulla dock è scomparso da se. senza che io facessi nulla.
Lanciando poi il comando successivo cioè 'sudo update-desktop-database' però non è ricomparso nulla. Ne nella lista delle app ne nulla nella dock dei preferiti. Devo forse scollegare l'account e rifare il login dell'utente ?


*EDIT 2a Parte*
No non funziona.... cosi facendo non ricompare il nuovo retropie.desktop anche terminando la sessione e rifancendo il login del mio utente.
Ultima modifica di DjDiabolik il lunedì 8 aprile 2024, 13:46, modificato 1 volta in totale.
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 5480
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da GjMan78 »

Prova a fare il logout o a riavviare

Edit

Scusa! Ho dimenticato un passaggio

Codice: Seleziona tutto

sudo chmod +x /usr/bin/retropie.sh
Ultima modifica di GjMan78 il lunedì 8 aprile 2024, 13:52, modificato 1 volta in totale.
MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
DjDiabolik
Prode Principiante
Messaggi: 121
Iscrizione: venerdì 30 marzo 2012, 4:03

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da DjDiabolik »

GjMan78 ha scritto:
lunedì 8 aprile 2024, 13:43
Prova a fare il logout o a riavviare
Sto facendo delle prove.. ho appena provato e appena rinomino il file in 'retropietest.desktop' ricompare quello nei preferiti.
Devo dargli forse i permessi di poter avviare il .desktop ?

*edit*
sudo chmod+x /usr/bin/retropie.sh mi da comando non trovato... mi sa che manca qualche spazio.... lol
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 5480
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da GjMan78 »

Devi rendere eseguibile lo script .sh

Codice: Seleziona tutto

sudo chmod +x /usr/bin/retropie.sh
MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
DjDiabolik
Prode Principiante
Messaggi: 121
Iscrizione: venerdì 30 marzo 2012, 4:03

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da DjDiabolik »

GjMan78 ha scritto:
lunedì 8 aprile 2024, 13:51
Devi rendere eseguibile lo script .sh

Codice: Seleziona tutto

sudo chmod +x /usr/bin/retropie.sh
Immagine
Allora funziona... il problema è che facendo cosi ora praticamente nelle App mi ritrovo due icone di retropie.... una quella appena creata e l'altra che crea lo script originale.

*EDIT*
Niente due file retropie.desktop non li vede... continua a prendere la precedenza quello su usr... anche togliendolo dai preferiti.

*EDIT 2a Parte*
Aspetta Aspetta.... Ho risolto con la questione delle 2 icone. Ora funziona e vede correttamente il .desktop ma c'è un problema.
Non sembra rilevare la presenza dell'instanza già lanciata... cioè:
Io lancio lo script e appunto parte Emulationstation. Ma de da tastiera torno al desktop e riclicco sopra l'icona Retropie riparte una seconda istanza di emulationstation....

*EDIT 3a Parte*
Allora ho provato a lanciare questo da un terminale... mi dice:

Codice: Seleziona tutto

diabolik@NUC-Ubuntu:~$ /usr/bin/retropie.sh
# L'opzione «-e» è deprecata e potrebbe essere rimossa in una futura versione del terminale di GNOME.
# Usare «-- » per terminare le opzioni e mettere la riga di comando da eseguire dopo di esso.
Dove diavolo prende quel "-e" ?

*EDIT 4a Parte*
Allora il "-e" è parte del .desktop originale e quindi anche poi parte del "nostro" retropie.sh creato un usr/bin....

*EDIT 5a Parte*
Potrei anche optare per una maniera più GREZZA... credo che il problema sia tutto nell'esecuzione della parte del ps... per assurdo se io do:

Codice: Seleziona tutto

diabolik@NUC-Ubuntu:~$ ps l -C emulationstation
F   UID     PID    PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
0  1000  240189  239512  20   0  10112  3712 do_wai Ss+  pts/1      0:00 /bin/bash /usr/bin/emulationstation
0  1000  240201  240189  20   0   2892  1536 do_wai S+   pts/1      0:00 /bin/sh /opt/retropie/supplementary/emulationstation/emulationstation.sh
0  1000  240204  240201  20   0 1138064 375200 do_pol Sl+ pts/1     0:07 /opt/retropie/supplementary/emulationstation/emulationstation
Non so se funziona.... e rivedere la parte della funzione "_isrunning".... è cosi che funziona ?

Ma c'è anche altra roba perchè se io do questo:

Codice: Seleziona tutto

diabolik@NUC-Ubuntu:~$ ps -o comm= -C emulationstation
emulationstatio
emulationstatio
emulationstatio
Perchè me lo da come emulationstatio senza la n finale ? E' forse li il problema che dobbiamo modificare il retropie.sh e togliere la "n" finale ? Sto andando completamente in pappa.



***** EDIT CONCLUSIVO ALMENO DA ORA A STASERA *****

Allora santo il signore... sembro che sono arrivato alla soluzione finale... il retropie.sh è ora cosi:

Codice: Seleziona tutto

#!/bin/bash
_isRunning() {
    ps -o comm= -C "$1" 2>/dev/null | grep -x "$1" >/dev/null 2>&1
}

if ! _isRunning emulationstatio; then
    gnome-terminal --full-screen --hide-menubar -e emulationstation
fi

exit 0
Allora cosi si avvia un'istanza di emulationstation... ma se lo iconizzo e torno al desktop e ci riclicco DIAMINE viene correttamente fatto il popup dell'istanza già avviata in precedenza!!!
AZZ!! Devo dire che sembro aver risolto o per lo meno funzionare.

Secondo te va bene cosi ?
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 5480
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da GjMan78 »

Direi che se funziona va più che bene!

Complimenti per il problem solving! :D :D
MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
DjDiabolik
Prode Principiante
Messaggi: 121
Iscrizione: venerdì 30 marzo 2012, 4:03

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da DjDiabolik »

GjMan78 ha scritto:
lunedì 8 aprile 2024, 18:02
Direi che se funziona va più che bene!

Complimenti per il problem solving! :D :D
Complimenti ? A me ? Davvero stai scherzando ?? Hai fatto tutto tu e i complimenti li becco io ?? Lol....

Ora vediamo se ho capito.... in teoria posso replicare la stessa cosa pure per Kodi. In pratica quello che c'è da fare:
- Prendere il .desktop e vedere la linea dell'exec
- Questa linea va nel file .sh da piazzare nella cartella bin e sotto all'if ps ecc. ecc.
- Poi c'è da fare un nuovo desktop copiando tutto il resto del desktop originale ma al posto dell'exec metterci il link al file .sh appena creato.

Se non dovesse funzionare anche li eventualmente vedere se il ps butta fuori stringhe strane.

Qua onestamente non mi spiego.. perchè il 'ps -o' esclude la "n" finale ? Me lo sai e/o te lo sai spiegare ? forse è il grep -x ?
In pratica vediamo.. ps -o comm= -C "$1" (dove poi $1 diventa appunto "emulationstation") esattamente come poi sul grep. il '>/dev/null dovrebbe servire per non far comparire il suo output a schermo però quel "2>" a che serve ?
In pratica sapresti spiegarmi un pò quella parte della riga bash ?

*EDIT*
E come sempre sostengo........ Google è sempre tuo amico... trovo semplicemente la soluzione alla domanda appena fatta qua:
https://man7.org/linux/man-pages/man1/ps.1.html

esattamente in questa parte che cito:
-C cmdlist
Select by command name. This selects the processes whose
executable name is given in cmdlist. NOTE: The command
name is not the same as the command line. Previous
versions of procps and the kernel truncated this command
name to 15 characters. This limitation is no longer
present in both. If you depended on matching only 15
characters, you may no longer get a match.
Tradotto sicuramente male dice:
Precedenti versioni di procps and the kernel troncano questo nome comando a 15 caratteri (emulationstatio.. 15 caratteri. con la n finale sarebbero 16)
Questa limitazione non è più presente in entrambi.... ciò significa che ho una versione antiquata del ps o del kernel ? Non capisco cosa voglia dire questa parte del manuale e a cosa sia riferita sta cosa.
Continua poi con "Se dipendevi dalla corrispondenza di soli 15 caratteri, potresti non ottenere più una corrispondenza." Qua proprio non capisco cosa voglia dire... in pratica un matching di 15 caratteri mi sembra buono..
Cioè se io faccio la stessa cosa con kodi potrei trovare più corrispondenze perchè beccare processi affini ? Non capisco qua...
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 5480
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da GjMan78 »

DjDiabolik ha scritto:
martedì 9 aprile 2024, 0:49
Complimenti ? A me ? Davvero stai scherzando ?? Hai fatto tutto tu e i complimenti li becco io ?? Lol....
C'erano dei dettagli da sistemare... ti sei impegnato a studiare i comandi per capire dove intervenire.
I complimenti te li meriti!
DjDiabolik ha scritto:
martedì 9 aprile 2024, 0:49
Ora vediamo se ho capito.... in teoria posso replicare la stessa cosa pure per Kodi. In pratica quello che c'è da fare:
- Prendere il .desktop e vedere la linea dell'exec
- Questa linea va nel file .sh da piazzare nella cartella bin e sotto all'if ps ecc. ecc.
- Poi c'è da fare un nuovo desktop copiando tutto il resto del desktop originale ma al posto dell'exec metterci il link al file .sh appena creato.

Se non dovesse funzionare anche li eventualmente vedere se il ps butta fuori stringhe strane.
Corretto!
DjDiabolik ha scritto:
martedì 9 aprile 2024, 0:49
Qua onestamente non mi spiego.. perchè il 'ps -o' esclude la "n" finale ? Me lo sai e/o te lo sai spiegare ? forse è il grep -x ?
In pratica vediamo.. ps -o comm= -C "$1" (dove poi $1 diventa appunto "emulationstation") esattamente come poi sul grep. il '>/dev/null dovrebbe servire per non far comparire il suo output a schermo però quel "2>" a che serve ?
In pratica sapresti spiegarmi un pò quella parte della riga bash ?

*EDIT*
E come sempre sostengo........ Google è sempre tuo amico... trovo semplicemente la soluzione alla domanda appena fatta qua:
https://man7.org/linux/man-pages/man1/ps.1.html

esattamente in questa parte che cito:
-C cmdlist
Select by command name. This selects the processes whose
executable name is given in cmdlist. NOTE: The command
name is not the same as the command line. Previous
versions of procps and the kernel truncated this command
name to 15 characters. This limitation is no longer
present in both. If you depended on matching only 15
characters, you may no longer get a match.
Tradotto sicuramente male dice:
Precedenti versioni di procps and the kernel troncano questo nome comando a 15 caratteri (emulationstatio.. 15 caratteri. con la n finale sarebbero 16)
Questa limitazione non è più presente in entrambi.... ciò significa che ho una versione antiquata del ps o del kernel ? Non capisco cosa voglia dire questa parte del manuale e a cosa sia riferita sta cosa.
Continua poi con "Se dipendevi dalla corrispondenza di soli 15 caratteri, potresti non ottenere più una corrispondenza." Qua proprio non capisco cosa voglia dire... in pratica un matching di 15 caratteri mi sembra buono..
Cioè se io faccio la stessa cosa con kodi potrei trovare più corrispondenze perchè beccare processi affini ? Non capisco qua...
Ho usato la funzione _isRunning diverse volte ma non mi ero mai accorto che troncasse gli output più lunghi di 15 caratteri.
Come giustamente hai riportato il colpevole è il comando ps -C ed ho appena verificato che anche su EndeavourOS con il kernel 6.8.4-zen1-1-zen ha lo stesso "problema".
Ma poco male... ora che lo sappiamo basta modificare il successivo if in modo che l'eventuale confronto tenga conto della lunghezza massima della stringa proprio come hai fatto tu per retroPie e non dovrebbero esserci problemi con le corrispondenze.

P.S. Riguardo i redirect come 2>&1 dai uno sguardo qui https://stackoverflow.com/questions/818 ... es-21-mean
MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
DjDiabolik
Prode Principiante
Messaggi: 121
Iscrizione: venerdì 30 marzo 2012, 4:03

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da DjDiabolik »

GjMan78 ha scritto:
martedì 9 aprile 2024, 8:57
cut cut
evito sempre di fare una lunga citazione...... allora sto guardando il link su stackoverflow e c'è una cosa che devo dire.
Non metto in dubbia l'utilità del sito ma qualsiasi argomento su quel sito onestamente manda completamente in pappa il mio cervello.
Non riesco proprio a capire il concetto e funzionamento del sito.. in pratica non ho mai capito come seguire una discussione in ordine cronologico perchè permette i commenti sotto poi i "vote up" e "vote down" mi creano una confusione infinita.
Ho un mio account li... ma non puoi commentare se non hai 1000 voti non puoi votare hai dei limiti che non ti permettono nemmeno di partecipare attivamente alle discussioni.
Per esempio dicono che questa cosa funziona allo stesso modo esattamente su windows... prima o poi dovrò trovare qualche documentazione in merito.. magari in italiano :)

Tornando 5 secondi in tema "Istanze Multiple" ieri notte ho dato una vista al .desktop di kodi. Devo specificare che attualmente ho due versioni diverse di kodi installate e attualmente credo di aver trovato solo il .desktop della versione presa dal PPA ufficiale che è in stallo alla versione 20.2. il suo file desktop è su /usr/share/applications/ ed è questo:

Codice: Seleziona tutto

[Desktop Entry]
Version=1.0
Name=Kodi
GenericName=Media Center
GenericName[zh_CN]=媒体中心
Comment=Manage and view your media
Comment[ru]=Просмотр и управление мультимедиа
Comment[zh_CN]=管理和查看您的媒体
Exec=kodi
Icon=kodi
Terminal=false
Type=Application
Categories=AudioVideo;Video;Player;TV;

Actions=Fullscreen;Standalone;

[Desktop Action Fullscreen]
Name=Open in fullscreen
Name[zh_CN]=全屏打开
Exec=kodi -fs

[Desktop Action Standalone]
Name=Open in standalone mode
Name[zh_CN]=在独立模式下打开
Exec=kodi --standalone
In questo caso la situazione si fa seria perchè o creo tre .sh differenti oppure credo sia possibile usare un singolo file .sh però poi nel mio ex-nuovo .desktop devo assegnarli le opzioni per replicare i 3 "exec" diversi.

Io ho provato cosi.. il file kodi.sh contiene:
#!/bin/bash
_isRunning() {
ps -o comm= -C "$1" 2>/dev/null | grep -x "$1" >/dev/null 2>&1
}

if ! _isRunning kodi; then
kodi %1
fi

exit 0
Nel file .desktop che ho ricreato io invece ho fatto così:

Codice: Seleziona tutto

[Desktop Entry]
Version=1.0
Name=Kodi
GenericName=Media Center
GenericName[zh_CN]=媒体中心
Comment=Manage and view your media
Comment[ru]=Просмотр и управление мультимедиа
Comment[zh_CN]=管理和查看您的媒体
Exec=/usr/bin/kodi.sh
Icon=kodi
Terminal=false
Type=Application
Categories=AudioVideo;Video;Player;TV;

Actions=Fullscreen;Standalone;

[Desktop Action Fullscreen]
Name=Open in fullscreen
Name[zh_CN]=全屏打开
Exec=/usr/bin/kodi.sh -fs

[Desktop Action Standalone]
Name=Open in standalone mode
Name[zh_CN]=在独立模式下打开
Exec=/usr/bin/kodi.sh --standalone
In teoria le varie opzioni --fs e --standalone dovrebbero andare nella variabile %1 e quindi essere rispettate nel file .sh ma sembra non funzionare.
O meglio se io lancio kodi col semplice click kodi parte... ma se uso le due "alternative" nel menù contestuale non parte nulla....

Che le "variabili" (non so nemmeno se si possono definire così) %1 su sistemi linux non funzionano ?

*EDIT*
Aggiungo una cosa... l'altra versione di kodi invece è la "variante" flatpak attualmente aggiornata a kodi 21.0. Il suo .desktop non è tra i preferiti. Anche qua per assurdo mi chiedo non è possibile differenziare le due icone ?
Si bè col .desktop ex-nuovo che ho piazzato nella cartella home (e quindi prende priorità rispetto a quello in /usr/etc.etc) posso mettere nella desrizione ciò che voglio anche se però devo monitorare se, con futuri aggiornamenti, il .desktop originale cambia la sua struttura e se si credo di aver capito che io devo quindi adattare i .desktop che ho ricreato io nella mia cartella "home" esatto ?
Se proprio poi voglio aggiungere un altra cosa... la "variante" flatpak non ha il suo .desktop ? Dove diavolo lo hanno nascosto ? Lol....

*EDIT 2a Parte*
Anche qua per assurdo forse sono arrivato... allora il problema del mettere la stringa kodi %1 nel file .sh in pratica non penso che lanci kodi con l'opzione richiesta.
Perchè se io lo lancio parte ma compare un messaggio d'errore all'avvio che dice "Riproduzione fallita e di controllare il kodi.log" ecc. ecc.
In pratica usando Kodi %1 è come se io gli sto dicendo di aprire un file con del contenuto e non di lanciare kodi con l'opzione richiesta dal file .dekstop. Ora provo a toglierla quel %1 tanto onestamente io non ho mai usato quelle due opzioni...
Però vorrei capire meglio come replicare la cosa..... veramente devo fare i 3 .sh differenti per ogni opzione di lancio richiesta dal .desktop ?
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 5480
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da GjMan78 »

Per fare tutto alla perfezione dovresti integrare nello script bash kodi.sh il controllo dei parametri aggiungendo le opzioni -fs e --standalone, ma per tua stessa ammissione non hai mai usato quelle opzioni quindi direi che è inutile complicarsi la vita a meno che non sia un mero esercizio di apprendimento.

Per far funzionare quello che hai creato finora ti basta togliere la stringa %1 dalla riga Exec del file .desktop.

Per trovare invece il file .desktop relativo al pacchetto flatpak devi guardare sempre in /var/lib/flatpak/export/share e piazzare il file modificato in ~/.local/share/flatpak/exports/share
MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
DjDiabolik
Prode Principiante
Messaggi: 121
Iscrizione: venerdì 30 marzo 2012, 4:03

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da DjDiabolik »

GjMan78 ha scritto:
martedì 9 aprile 2024, 17:19
Per fare tutto alla perfezione dovresti integrare nello script bash kodi.sh il controllo dei parametri aggiungendo le opzioni -fs e --standalone, ma per tua stessa ammissione non hai mai usato quelle opzioni quindi direi che è inutile complicarsi la vita a meno che non sia un mero esercizio di apprendimento.

Per far funzionare quello che hai creato finora ti basta togliere la stringa %1 dalla riga Exec del file .desktop.

Per trovare invece il file .desktop relativo al pacchetto flatpak devi guardare sempre in /var/lib/flatpak/export/share e piazzare il file modificato in ~/.local/share/flatpak/exports/share
infatti ora ho tolto il %1 ma non nel nuovo .desktop ma nel file sh...
il mio ex-nuovo file .desktop è così ora:
[Desktop Entry]
Version=1.0
Name=Kodi 20.2
GenericName=Media Center
GenericName[zh_CN]=媒体中心
Comment=Manage and view your media
Comment[ru]=Просмотр и управление мультимедиа
Comment[zh_CN]=管理和查看您的媒体
Exec=/usr/bin/kodi.sh
Icon=kodi
Terminal=false
Type=Application
Categories=AudioVideo;Video;Player;TV;

Actions=Fullscreen;Standalone;

[Desktop Action Fullscreen]
Name=Open in fullscreen
Name[zh_CN]=全屏打开
Exec=/usr/bin/kodi.sh -fs

[Desktop Action Standalone]
Name=Open in standalone mode
Name[zh_CN]=在独立模式下打开
Exec=/usr/bin/kodi.sh --standalone
Nel kodi.sh sotto all'ifrunning e alla stringa per il "ps" invece ho messo semplicemente "kodi" che è il comando usato per avviare kodi, appunto, ma cosi facendo non penso che mi porto dietro quelle opzioni/paramentri..

Onestamente le opzioni le ho nel menù contestuale di kodi ma se lo lancio non so nemmeno come verificare se effettivamente kodi viene lanciato come standlone o in fullscreen perchè non c'è nessuna informazione che lo segnala.. da nessuna parte... forse nel suo kodi.log ?? Non saprei....

Invece per la versione 21.0 del flatpak ho trovato il suo .desktop ed effettivamente è nella sottocartella da te indicata in /var/etc etc/ c'ho dato una vista ed ha sempre i 3 exec con i 3 parametri però i 3 exec sono stringhe complesse non so nemmeno se poi è applicabile la questione del'_ifrunning.

Ma onestamente ad ora mi frega poco.. perchè questa versione del kodi 21.0 flatpak non è tra i preferiti ma è tra il menù delle app completo che come fai un click su una app si chiude quindi, molto probabilmente, non hai nemmeno il tempo fisico per fare il doppio click per errore...

A questo punto si... la cosa dei parametri è un puro scrupolo :)
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 5480
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da GjMan78 »

Il file .desktop puoi "alleggerirlo" eliminando le parti superflue

Codice: Seleziona tutto

[Desktop Entry]
Version=1.0
Name=Kodi 20.2
GenericName=Media Center
GenericName[zh_CN]=媒体中心
Comment=Manage and view your media
Comment[ru]=Просмотр и управление мультимедиа
Comment[zh_CN]=管理和查看您的媒体
Exec=/usr/bin/kodi.sh
Icon=kodi
Terminal=false
Type=Application
Categories=AudioVideo;Video;Player;TV;
MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
DjDiabolik
Prode Principiante
Messaggi: 121
Iscrizione: venerdì 30 marzo 2012, 4:03

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da DjDiabolik »

GjMan78 ha scritto:
martedì 9 aprile 2024, 18:49
Il file .desktop puoi "alleggerirlo" eliminando le parti superflue

Codice: Seleziona tutto

[Desktop Entry]
Version=1.0
Name=Kodi 20.2
GenericName=Media Center
GenericName[zh_CN]=媒体中心
Comment=Manage and view your media
Comment[ru]=Просмотр и управление мультимедиа
Comment[zh_CN]=管理和查看您的媒体
Exec=/usr/bin/kodi.sh
Icon=kodi
Terminal=false
Type=Application
Categories=AudioVideo;Video;Player;TV;
Si bè certo... se voglio togliere le due opzioni di avvio con i due parametri si.

Ma più che altro è che non c'è modo di verificare se kodi parte in fullscreen o no.. o provato a lanciarlo manualmente dal terminale poi confrontare i kodi.log e se lo eseguo col -fs o senza nel kodi.log non sembra cambiare nulla.

La standalone onestamente non so nemmeno che sia... lol


*EDIT*
Forse qua c'è la soluzione... gli argomenti dovrebbero essere possibile passarli in questa maniera:
https://unix.stackexchange.com/a/31416

Invece del %1 usare $1.. il problema che $1 all'interno del file sh noi mi sa che lo usiamo già per la variabile Kodi e per il PS. ma voglio vedere cosa viene fuori.

*EDIT 2*
Poi per oggi prometto la smetto e magari... proprio con kodi mi guardo un film.. lol:
Allora per provare a mantenere gli argomenti ora ho fatto questo... ho creato 2 file.
~/test.sh:

Codice: Seleziona tutto

#!/bin/bash 
echo 'Prova di Argomento:' "$1"
sleep 10 
Poi nella cartella "Scrivania" ho creato il suo .desktop per lanciarlo.. che è così:

Codice: Seleziona tutto

[Desktop Entry]
Type=Application
Exec=/home/diabolik/test.sh TestNumeroUno
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=test
Comment=
Icon=
Categories=
Terminal=true
Allora devo dire che quando lancio il test.desktop, appunto dalla scrivania vedo correttamente la finestra di terminale che viene lanciata e appunto la "variabile" $1 è correttamente settata e a schermo appunto compare esattamente quello del comando echo seguito da "TestNumeroUno" (senza le " " ovviamente)

Ora riportando questo esempio al nostro kodi.sh e ex-nuovo kodi.desktop come detto la funzione _isrunning usa una variabile $1 che nella condizione "if" .... ora se io uso sotto kodi $1 non penso prenda quella che io setto dal .desktop.... come faccio a testare questa cosa?
Se io metto lo sleep 10 da qualche parte nel kodi.sh me ne accorgo ? Tipo se ci metto un "echo $1" da qualche parte prima dell'avvio di kodi ?

*EDIT 3*
Ed ancora una volta forse la vinco...... sembra funzionare perfettamente.... per fare dei test ho editato i due file del kodi così:

Codice: Seleziona tutto

[Desktop Entry]
Version=1.0
Name=Kodi 20.2
GenericName=Media Center
GenericName[zh_CN]=媒体中心
Comment=Manage and view your media
Comment[ru]=Просмотр и управление мультимедиа
Comment[zh_CN]=管理和查看您的媒体
Exec=/usr/bin/kodi.sh
Icon=kodi
Terminal=true
Hidden=false
Type=Application
Categories=AudioVideo;Video;Player;TV;

Actions=Fullscreen;Standalone;

[Desktop Action Fullscreen]
Name=Open in fullscreen
Name[zh_CN]=全屏打开
Exec=/usr/bin/kodi.sh -fs

[Desktop Action Standalone]
Name=Open in standalone mode
Name[zh_CN]=在独立模式下打开
Exec=/usr/bin/kodi.sh --standalone
Mentre il file kodi.sh è ora questo:

Codice: Seleziona tutto

#!/bin/bash
#echo 'Test variabile: '"$1"
#sleep 10

_isRunning() {
ps -o comm= -C "$1" 2>/dev/null | grep -x "$1" >/dev/null 2>&1
}

if ! _isRunning kodi; then
        echo 'Test Variabile: '"$1"
        Echo 'Premi CTRL+C per non avviare Kodi... entro 60 secondi' && sleep 60
        kodi "$1"
fi



exit 0
Ho provato poi i 3 avvi differenti ed effettivamente ciò che gli associa dal .desktop lo mostra perfettamente nella variabile $1.... forse anche stavolta la spunto io :)

Esempio di cosa viene esattamente fuori aprendo il menù contestuale di kodi e cliccando "Open in fullscreen":
Immagine

E se non annullo quello sleep di 60 secondi parte senza errori kodi... bene ora posso commentare i test e iniziare a godermi kodi in singola istanza. lol

*EDIT 4*
MA PERCHE'!!! PERCHE' ORA MI RIMANE UNA FINESTRA DI TERMINALE APERTA ?? Non c'era mai rimasta......... ora invece rimane una finestra di terminale con alcune righe mentre kodi è in esecuzione.
Ma visto nulla di simile...... non c'era mai stata questa finestra di terminale.... devo cancellare tutto e rifare tutto da capo. A mio avviso qualcosa che è andato storto c'è.

*EDIT 5*
Allora ho cancellato tutto e ricreato tutto.. sia il .sh in bin che il .desktop ed ora nessuna finestra di terminale resta aperta nel frattempo che viene eseguito kodi.
Incollo qua i file attuali cosi servono a me pure come BACKUP visto che molto probabilmente riproverò a rimettere il test per testare la variabile/argomento.. allora:
usr/bin/kodi.sh :

Codice: Seleziona tutto

#!/bin/bash
_isRunning() {
ps -o comm= -C "$1" 2>/dev/null | grep -x "$1" >/dev/null 2>&1
}

if ! _isRunning kodi; then
        kodi "$1"
fi

exit 0
E il suo kodi.desktop in home/etc etc/application:

Codice: Seleziona tutto

[Desktop Entry]
Version=1.0
Name=Kodi 20.2
GenericName=Media Center
GenericName[zh_CN]=媒体中心
Comment=Manage and view your media
Comment[ru]=Просмотр и управление мультимедиа
Comment[zh_CN]=管理和查看您的媒体
Exec=/usr/bin/kodi.sh
Icon=kodi
Terminal=false
Type=Application
Categories=AudioVideo;Video;Player;TV;

Actions=Fullscreen;Standalone;

[Desktop Action Fullscreen]
Name=Open in fullscreen
Name[zh_CN]=全屏打开
Exec=/usr/bin/kodi.sh -fs

[Desktop Action Standalone]
Name=Open in standalone mode
Name[zh_CN]=在独立模式下打开
Exec=/usr/bin/kodi.sh --standalone
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 5480
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: Possibile evitare istante multiple per determinate applicazioni ?

Messaggio da GjMan78 »

Alla fine sei riuscito nel tuo intento. Bravo!
MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
Scrivi risposta

Ritorna a “GNOME”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti