[RISOLTO][BASH-C] Eseguire applicativo su specifica area di lavoro

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
IacopoDeeNosee
Prode Principiante
Messaggi: 194
Iscrizione: giovedì 3 maggio 2007, 0:00
Contatti:

[RISOLTO][BASH-C] Eseguire applicativo su specifica area di lavoro

Messaggio da IacopoDeeNosee »

è possibile lanciare da terminale un applicativo specificando l'area di lavoro in cui l'eseguibile apparirà?chiarisco che uso compiz con 4 aree di lavoro attive,il classico cubo per capirsi.
BYE  ???
Ultima modifica di IacopoDeeNosee il venerdì 26 settembre 2008, 11:43, modificato 1 volta in totale.
Skype -> IacopoDeeNosee
m4ssimo
Prode Principiante
Messaggi: 117
Iscrizione: lunedì 1 maggio 2006, 13:44

Re: [BASH] Eseguire applicativo su specifica area di lavoro

Messaggio da m4ssimo »

Non so se si possa fare in bash so che però alcuni programmi (non ricordo esempi XD) hanno opzioni che permettono di farlo..è una cosa legata al singolo programma però e non un opzione "generale"!

Spero qualcun altro possa darti maggior informazioni
Avatar utente
Volans
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4915
Iscrizione: domenica 4 dicembre 2005, 11:25
Contatti:

Re: [BASH] Eseguire applicativo su specifica area di lavoro

Messaggio da Volans »

Molti programmi grafici includono le opzioni per il server X tra cui:
--display=DISPLAY
controlla se il tuo ce l'ha ;)
Volans
Prima di scrivere leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Avatar utente
IacopoDeeNosee
Prode Principiante
Messaggi: 194
Iscrizione: giovedì 3 maggio 2007, 0:00
Contatti:

Re: [BASH] Eseguire applicativo su specifica area di lavoro

Messaggio da IacopoDeeNosee »

ho fatto una prova con gedit,che ha questa possibilità fra le opzioni,ma credo di sbagliare la sintassi...

Codice: Seleziona tutto

iacopodeenosee@ubuntu:~$ gedit --help
Uso:
  gedit [OPZIONE...] [FILE...] - Modifica file di testo

Opzioni dell'applicazione:
  --encoding=CODIFICA             Imposta la codifica dei caratteri da usare per aprire i file elencati nella riga di comando
  --new-window                    Crea una nuova finestra toplevel in un'istanza esistente di gedit
  --new-document                  Crea un nuovo documento in un'istanza esistente di gedit
  --display=DISPLAY               Display X da usare

iacopodeenosee@ubuntu:~$ gedit --display=:0.0
iacopodeenosee@ubuntu:~$ gedit --display=:0.1
cannot open display: :0.1
Eseguire "gedit --help" per vedere un elenco completo delle opzioni a riga di comando.
iacopodeenosee@ubuntu:~$ gedit --display=:0.2
cannot open display: :0.2
Eseguire "gedit --help" per vedere un elenco completo delle opzioni a riga di comando.
in compiz ho settato a 4 i desktop virtuali in orizzontale,a 1 quelli virtuali in verticale,se lancio gedit indicandogli il display 0.0 mii lancia l'applicativo nel desktop attivo,mentre se indico un'altro desktop mi da errore:
cannot open display: :0.1
dove sbaglio?
Skype -> IacopoDeeNosee
Avatar utente
tomm
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 796
Iscrizione: lunedì 15 ottobre 2007, 10:16
Desktop: Gnome
Distribuzione: Ubuntu 16.04

Re: [BASH] Eseguire applicativo su specifica area di lavoro

Messaggio da tomm »

non so esattamente a cosa si riferisce --display=DISPLAY ma sicuramente non alle aree di lavoro
Credo che si riferisca all' x server. Di default all'avvio viene avviato un x server, ma se ne possono avviare anche altri e farci partire le applicazioni (correggetemi se sbaglio)

A IacopoDeeNosee:
non so se si può fare quello che dici tu, ma con devilspie (nei repository - tutorial) puoi impostare su quale area di lavoro si deve aprire un'applicazione e molto altro (grandezza finestra, in basso, in alto, a lato ecc...).
Avatar utente
Volans
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4915
Iscrizione: domenica 4 dicembre 2005, 11:25
Contatti:

Re: [BASH] Eseguire applicativo su specifica area di lavoro

Messaggio da Volans »

@tomm:
mi sa che hai ragione, mi stavo confondendo... è che con --screen lo apri su un altro schermo se hai più schermi configurati, con --display per esclusione avevo pensato alle aree di lavoro ma è possibile che si riferisca ad altri display X avviabili che poi trovi in ctrl+alt+F8 e successivi...
Volans
Prima di scrivere leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Avatar utente
IacopoDeeNosee
Prode Principiante
Messaggi: 194
Iscrizione: giovedì 3 maggio 2007, 0:00
Contatti:

Re: [BASH] Eseguire applicativo su specifica area di lavoro

Messaggio da IacopoDeeNosee »

ho dato un occhio ai sorgenti di devilspie ed ho notato che per cambiare area di lavoro usa la libreria Libwnck,ora ho provato a realizzare un piccolo applicativo in C,usando la stessa libreria,per cambiare l'area di lavoro attiva.Questo è il codice:

Codice: Seleziona tutto

//-----------------------------------//
//--------Include libraries----------//
//-----------------------------------//

#include <stdio.h>
#include <stdlib.h>
#include <glib.h>
#include <gdk/gdk.h>
#include <libwnck/application.h>
#include <libwnck/class-group.h>
#include <libwnck/workspace.h>

//to compile use this command:
//		gcc -Wall ChangeDesktop.c -o ChangeDesktop `pkg-config --cflags --libs glib-2.0 libwnck-1.0 gdk`


//-----------------------------------//
//------------Main function----------//
//-----------------------------------//

int main(int argc, char *argv[], char *envp[]) 
{
	int i, j;
	WnckScreen *screen;
	WnckWorkspace *workspace;
	int num;
	GTimeVal timestamp;

	//example of use : $ ChangeDesktop 1 gedit | ChangeDesktop <number of workspace to active> <command to execute into the workspace indicated>
	
	g_print("- NUMERO DI ARGOMENTI PASSATI %d -\n",argc);
	
	g_print("- ARGOMENTI PASSATI -\n\n");
	for (i = 0; i < argc; i++)
		g_print("%s\\n", argv[i]);
          
	g_print("\n\n- VARIABILI DI AMBIENTE -\n\n");        
	for (j = 0; envp[j] !='\0'; j++) {
		g_print("%s\n", envp[j]);
	}
	
	/* Initialise GDK */
	gdk_init(&argc, &argv);
	
	num = 0;
	
	screen = wnck_screen_get_default();

	int Num_Screens = gdk_display_get_n_screens (gdk_display_get_default());
	g_print("numero di screens : %d \n",Num_Screens);
	
	int Num_Workspace = wnck_screen_get_workspace_count(screen);
	g_print("numero di workspace : %d \n",Num_Workspace);	

	workspace = wnck_screen_get_workspace(screen, num);
	
	if (!workspace)
	{ 
		g_print("Workspace number %d does not exist\n", num);
		return 1;
	}

	g_get_current_time(&timestamp);
	wnck_workspace_activate(workspace, timestamp.tv_sec);

	system("gedit");
	
	return 0;
}
il programma pare funzionare bene solo che non trova le 4 aree di lavoro e di conseguenza non posso attivarne una, ho guardato anche nelle variabili d'ambiente passate all'eseguibile ma non ho trovato niente di utile  ???
vorrei sapere in cosa sbaglio? ma sopratutto dove posso reperire della documentazione riguardo alla libreria Libwnck...  >:(
Skype -> IacopoDeeNosee
Avatar utente
paper0k
Rampante Reduce
Rampante Reduce
Messaggi: 7220
Iscrizione: lunedì 2 ottobre 2006, 13:39
Contatti:

Re: [BASH] Eseguire applicativo su specifica area di lavoro

Messaggio da paper0k »

Chiunque può essere ragionevole, ma esser sani di mente è raro (Oscar Wilde)
Wiki|Blog|Twitter|Identi.ca|last.fm
Avatar utente
IacopoDeeNosee
Prode Principiante
Messaggi: 194
Iscrizione: giovedì 3 maggio 2007, 0:00
Contatti:

Re: [BASH] Eseguire applicativo su specifica area di lavoro

Messaggio da IacopoDeeNosee »

grazie del suggerimento,ho provato wmctrl e funziona se uso metacity come VM mentre se uso compiz non riconosce le aree di lavoro,qui sotto riporto il risultato del comando -l usando come VM compiz e tutte le finestre compaiono sotto un unica area di lavoro anche se in realtà sono disposte su 4 aree  ???

Codice: Seleziona tutto

iacopodeenosee@ubuntu:~$ wmctrl -l
0x04600024  0 ubuntu Liferea
0x01000003  0 ubuntu Pannello di bordo espanso superiore
0x01200022  0 ubuntu Scrivania
0x01e00060  0 ubuntu Elenco conoscenti
0x03a00001  0 ubuntu iacopodeenosee - Skype™
0x03600033  0 ubuntu gdesklets-daemon
0x0360009d  0 ubuntu gdesklets-daemon
0x036000e6  0 ubuntu gdesklets-daemon
0x036001c8  0 ubuntu gdesklets-daemon
0x0360025c  0 ubuntu gdesklets-daemon
0x036002ec  0 ubuntu gdesklets-daemon
0x0360037c  0 ubuntu gdesklets-daemon
0x03e00024  0 ubuntu Firestarter ubuntu
0x04000020  0 ubuntu iacopodeenosee@ubuntu: ~
0x030004d5  0 ubuntu aMule 2.2.1
0x012000e4  0 ubuntu Condivisioni Windows su 192.168.1.150 - Esplorazione file
0x0120029d  0 ubuntu Incoming - Esplorazione file
0x04200183  0 ubuntu [BASH] Eseguire applicativo su specifica area di lavoro - Mozilla Firefox
0x044000ca  0 ubuntu Posta in arrivo - Mozilla Thunderbird
0x04800006  0 ubuntu Main.c - /home/iacopodeenosee/Progetti_Building/VisualHunter/src - [visualhunter] - Geany
0x04a00003  0 ubuntu Libwnck Reference Manual : WnckWorkspace
0x0120066c  0 ubuntu VisualHunter - Esplorazione file
perciò presumo che il problema sia compiz e non il mio programmino in c.Può essere un bug di compiz?o è un problema relativo alle mie impostazioni?a voi funziona?
Skype -> IacopoDeeNosee
Avatar utente
IacopoDeeNosee
Prode Principiante
Messaggi: 194
Iscrizione: giovedì 3 maggio 2007, 0:00
Contatti:

Re: [BASH] Eseguire applicativo su specifica area di lavoro

Messaggio da IacopoDeeNosee »

indagando è rislutato che compiz non usa i workspace ma i viewport per i vari desktop ed al momento la libreria Libwnck li gestisce separatamente,ora ho coretto il codice è funziona anche con compiz.

Codice: Seleziona tutto

//-----------------------------------//
//--------Include libraries----------//
//-----------------------------------//

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <glib.h>
#include <gdk/gdk.h>
#include <libwnck/application.h>
#include <libwnck/class-group.h>
#include <libwnck/workspace.h>

//to compile use this command:
//		gcc -Wall ChangeDesktop.c -o ChangeDesktop `pkg-config --cflags --libs glib-2.0 libwnck-1.0 gdk`


//-----------------------------------//
//------------Main function----------//
//-----------------------------------//

int main(int argc, char *argv[], char *envp[]) 
{
	gint i, j;
	gint SelectWorkspace=0;
	WnckScreen *Screen;
	WnckWorkspace *Workspace;
	GTimeVal timestamp;
        gchar StrCommand[1000]="";

	g_print("- NUMBER OF ARGUMENTS %d -\n\n",argc);

	g_print("- ARGUMENTS -\n\n");
	for (i = 0; i < argc; i++)
		g_print("%s\n", argv[i]);
          
	g_print("\n\n- VARIABLES OF ENVIRONMENT -\n\n");        
	for (j = 0; envp[j] !='\0'; j++) 
			g_print("%s\n", envp[j]);

	//check the number of arguments
	if(argc!=3)
	{
		g_print("\n>> ERROR too many/few arguments!!! <<\n ChangeDesktop <num of desktop> <command to execute> \n num desktop starting from 1 to n \n");
		return 1;
	}

	//copy the arguments of number of desktop to active
	SelectWorkspace = atoi(argv[1]);

	//copy the arguments of command to the string
	strcpy(StrCommand,argv[2]);

	g_print("launch application > %s < into the desktop > %d < \n",StrCommand,SelectWorkspace);

	/* Initialise GDK */
	gdk_init(&argc, &argv);
	
	Screen = wnck_screen_get_default();

	gint Num_Screens = gdk_display_get_n_screens (gdk_display_get_default());
	g_print("Number of screens : %d \n",Num_Screens);
	
	gint Num_Workspace = wnck_screen_get_workspace_count(Screen);
	g_print("Number of workspaces : %d \n",Num_Workspace);	
	
	gint ScreenWidth = wnck_screen_get_width(Screen);
	g_print("Width of screen : %d \n",ScreenWidth);

	gint ScreenHeight = wnck_screen_get_height(Screen);
	g_print("Height of screen : %d \n",ScreenHeight);

	Workspace = wnck_screen_get_workspace(Screen,SelectWorkspace-1);

	if (!Workspace)
	{ 
		g_print("Workspace number %d does not exist!!!\njust change the viewport instead\n", SelectWorkspace);
		//change the desktop		
		wnck_screen_move_viewport(Screen,ScreenWidth*(SelectWorkspace-1),0);
		
	}	
	else
	{
		g_get_current_time(&timestamp);
		//change the desktop
		wnck_workspace_activate(Workspace, timestamp.tv_sec);
	}
	//wait for change the desktop
	sleep(1);
	//launch the program
	system(StrCommand);

	return 0;
}
BYE  ;)
Skype -> IacopoDeeNosee
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 7 ospiti