Ciao. Sto per finire la 0.1.33, in cui ho risolto alcuni bug e aggiunto nuove funzioni. Solo che avrei bisogno di aiuto per un comando. Si tratta del comando per installare skype. Su ubuntu, skype si trova nei repository "partner" che non sono abilitati di default. Quindi ho cercato ed adoperato un comando che abilita questo repository (da shell) per l'installazione. Siccome vorrei però che questo software possa essere usato su diversi rilasci, dovrei modificare il comando in questo modo
PUBLIC SUB ButtonSkype_Click()
DIM $dist as String
$dist = ????
SHELL "sed -i 's?# deb http://archive.canonical.com/ubuntu dist partner?deb http://archive.canonical.com/ubuntu dist partner?' /etc/apt/sources.list"
END
Cioè dovrei assegnare alla funzione "dist" il nome del rilascio in cui viene eseguito il software. Se, ad esempio, uextras viene eseguito sotto ubuntu lucid, il comando dovrà assumere questa forma
sed -i 's?# deb http://archive.canonical.com/ubuntu lucid partner?deb http://archive.canonical.com/ubuntu lucid partner?' /etc/apt/sources.list
In sostanza, mi servirebbe sapere cosa mettere nella stringa "$dist = ????", ovvero come ricavarmi questo comando tramite gambas
Grazie mille :)
Su Ubuntu e Debian di sicuro, su altre non saprei, dovrebbe essere sempre possibile ottenere il nome della distribuzione con
che, almeno nel mio caso, restituisce
Debian GNU/Linux squeeze/sid \n \l
Suppongo che in questi casi uno debba considerare che ci sia un'installazione mista, e nel caso provvedere a scartare la seconda parte...
Un'altra strada e' usare lsb_release, ma non e' detto che sia installato, almeno su Debian, ma se usi quella riga piu' che Debian based dovresti dire Ubuntu...
Ho risolto per il momento, ma non è assolutamente una scelta definitiva (se è possibile un'altra strada è meglio). In pratica, tramite la shell, mi richiamo uno script che ho fatto:
#!/bin/bash
dist=$(lsb_release -cs)
sed -i "s?# deb http://archive.canonical.com/ubuntu $dist partner?deb http://archive.canonical.com/ubuntu $dist partner?" /etc/apt/sources.list
sudo apt-get update
sudo apt-get install skype
exit 0
in cui mi sono ricavato il nome della distribuzione grazie a lsb_release. L'ho testato su Ubuntu Maverick, Lucid e su Linux Mint 9; funziona (la variabile $dist si adatta perfettamente e i repository vengono attivati ed aggiornati) anche se come ho detto prima preferire convertire questo procedimento con qualche funzione di gambas (di cui però ignoro l'esistenza :-\).
Tra poco posto la nuova versione :)
Vi ringrazio per le risposte. Un amico mi ha suggerito di fare questo
SHELL "gksudo synaptic"
SHELL "kdesudo kpackagekit"
In questo modo, se trova la prima opzione esegue quella, altrimenti passa direttamente alla seconda. Effettivamente funziona, ma ci possono essere controindicazioni? In ogni caso dovrei testarlo su un ambiente KDE basato su Debian, qualcuno ce l'ha??
Stessa cosa ho fatto con l'editor del sources.list
SHELL "gksudo gedit /etc/apt/sources.list"
SHELL "kdesudo kate /etc/apt/sources.list"
AGGIORNAMENTI:
Ho sistemato un bug su "ripristino lista sorgenti" (il comando che permette di riportare il sources.list alla sua forma originale, conservando comunque l'attuale in forma sources.list.old) che in pratica non funzionava bene con Ubuntu Maverick; inoltre, la stessa funzione gestisce ora anche i sources.list di debian lenny e squeeze :)
CONSIGLIO:
Ci sono alcune cose che su Ubuntu vanno e su Debian no. Ad esempio, Skype e Firefox non sono presenti nei repo di Debian, quindi premendo i relativi pulsanti non succede nulla. Secondo voi devo fare due versioni distinte (una per debian e una per ubuntu)? Oppure non ne vale la pena?
Grazie per l'attenzione e scusate le mille domande :)
a questo punto potresti fare un semplice
SHELL "which gksudo" TO stringa
ti ritorna nella stringa il percorso del binario
se la stinga è vuota il programma non è installato.
a me sembrerebbe un metodo più pulito di quello che hai scritto sotto anche perchè per vari motivi potresti avere instalalto entrambi i programmi e verrebbero lanciati tutti e due
Ciao ragazzi. Dunque ho un piccolo dubbio: ho inserito una finestra per vedere le caratteristiche del pc in uso. Nel codice della finestra ho inserito anche un pulsante per salvare tutte queste informazioni in un file di testo, utile per chi ad esempio fa una richiesta di supporto nei forum
PUBLIC SUB BtnSave_Click()
DIM save AS String
save = TextLabel1.Text & TextLabel2.Text & TextLabel3.Text & TextLabel4.Text & TextLabel5.Text & TextLabel6.Text & TextLabel7.Text & TextLabel8.Text & TextLabel9.Text & TextLabel10.Text & TextLabel11.Text & TextLabel12.Text
File.Save("~/Scrivania/pcinfo", save)
END
quando si preme il pulsante, viene creato un file nel desktop contenente le informazioni (che si trovano nelle varie TextLabel). Tuttavia io vorrei inserire in questo file delle diciture per spiegare meglio di cosa si tratta. In pratica, il file si presenta così
vaillant86
vaillant86-sparrow
Ubuntu 10.10
x86_64
2.6.35-23-generic
3961 MB
948 MB
venerdì 26/11/2010 22:26
eth0
192.168.1.118
+20.0°C
+30.0°C
cioè stampa solo le informazioni che rileva. Io vorrei poterlo rendere così
Nome: vaillant86
Computer: vaillant86-sparrow
Distribuzione: Ubuntu 10.10
Architettura: x86_64
Kernel: 2.6.35-23-generic
Memoria totale: 3961 MB
Memoria in uso: 948 MB
Data e ora: venerdì 26/11/2010 22:26
Interfaccia di rete: eth0
IP: 192.168.1.118
Temperatura CPU: +20.0°C
Temperatura scheda madre: +30.0°C
è possibile? Grazie :2birre:
Il progettino procede bene :) ho anche dei fans ora ;D
Sto creando una sezione per il monitoraggio delle risorse. Tra le varie opzioni, che mi sono già ricavato, ho un piccolo intoppo per quanto riguarda gli hard disk. Con questo comando
cat /proc/partitions | grep sda | head -n 1 | awk {'print $3'}
mi stampo la dimensione del disco sda, poi con bc lo converto
VAR=$(cat /proc/partitions | head -n 3 | grep sda | awk {'print $3'})
echo $VAR/1024/1024 | bc
232
ma questo va bene nei pc con un solo disco rigido... però nel mio caso, dato che ho due dischi, questo comando non basta, in quanto mi visualizzerebbe solo il primo disco e non il secondo. Io devo ricorrere ad un secondo comando
cat /proc/partitions | grep sdb | head -n 1 | awk {'print $3'}
Ciò che vorrei fare è: nel caso nel computer sia presente un solo disco, allora stampa l'output del primo comando nella textlabel apposita. Se invece nel computer è presente un disco aggiuntivo, abilita oppure rendi visibile la seconda textlabel e stampa l'output relativo.
Secondo voi si può fare??
Non so cosa ho fatto o cosa ho toccato, ma adesso su KDE si vede una meraviglia :rolleyes: boh, meglio così.
Ora sto cercando di fare una cosa: in questa sezione
(http://upload.centerzone.it/images/14030872302410225950_thumb.jpg) (http://upload.centerzone.it/viewer.php?file=14030872302410225950.png)
ho inserito il totale della memoria del sistema e il quantitavo utilizzato. Questo secondo valore però rimane "freezato" all'apertura del programma. C'è un modo per fare il refresh dei dati inseriti, magari aggiornando il valore ogni tot secondi?
Il codice che ho utilizzato è
DIM output2 AS String
SHELL "echo `free -m | grep - | awk {'print $3'}`" TO output2
TextLabel2.Text = output2
Non so se nel forum se ne sia già discusso, sinceramente non ho idea di come cercare un argomento simile... :-[
Sono di nuovo inceppato :hard:
Dunque, ho scritto questo codice
DIM ppa1, ppa2 AS String
' Metti il primo e il secondo file della directory /etc/apt/sources.list.d/ in due variabili
SHELL "ls /etc/apt/sources.list.d/ | grep -v save | sed -n '1p'" TO ppa1
SHELL "ls /etc/apt/sources.list.d/ | grep -v save | sed -n '2p'" TO ppa2
' Se esiste il primo file della directory /etc/apt/sources.list.d/ allora stampa il suo nome
IF Exist("/etc/apt/sources.list.d/" & ppa1) = TRUE THEN
PRINT ppa1
ENDIF
ma non me lo "printa"... ho provato anche a mettere l'opzione FALSE e funziona a dovere, ergo l'errore sta nel ("/etc/apt/sources.list.d/" & ppa1), ma non sono riuscito a capire come risolverlo. Secondo le guide presenti nel wiki, la sintassi dovrebbe essere corretta, no?
Per completezza di informazioni, il percorso del primo file di quella dir è /etc/apt/sources.list.d/chromium-daily-ppa-maverick.list
DIM ppa1, ppa2 AS String
' Metti il primo e il secondo file della directory /etc/apt/sources.list.d/ in due variabili
SHELL "ls /etc/apt/sources.list.d/ | grep -v save | sed -n '1p'" TO ppa1
SHELL "ls /etc/apt/sources.list.d/ | grep -v save | sed -n '2p'" TO ppa2
' elimina eventuali spazi e ritorni a capo
ppa1 = Trim(ppa1)
ppa2 = Trim(ppa2)
' Se esiste il primo file della directory /etc/apt/sources.list.d/ allora stampa il suo nome
IF Exist("/etc/apt/sources.list.d/" & ppa1) = TRUE THEN
PRINT ppa1
ENDIF
Dim ppa1, ppa2 As String
' Metti il primo e il secondo file della directory /etc/apt/sources.list.d/ in due variabili
Shell "ls /etc/apt/sources.list.d/ | grep -v save | sed -n '1p'" To ppa1
Shell "ls /etc/apt/sources.list.d/ | grep -v save | sed -n '2p'" To ppa2
' elimina eventuali ritorni a capo
ppa1 = Replace(ppa1, "\n", "")
ppa2 = Replace(ppa2, "\n", "")
' Se esiste il primo file della directory /etc/apt/sources.list.d/ allora stampa il suo nome
If ppa1 Then
If Exist("/etc/apt/sources.list.d/" & ppa1) Then Print ppa1
Endif
If ppa2 Then
If Exist("/etc/apt/sources.list.d/" & ppa2) Then Print ppa2
Endif
ps: personalmente una frase come questa :
("'. This may mean that:\n\n- The package is not installed;\n- The package does not have a valid changelog;\n- The package does not exist;\n\nPlease retry!"
dovrebbe essere scritta così
("'. This may mean that") & ":\n\n- " & ("The package is not installed") & ";\n- " & ("The package does not have a valid changelog") & ";\n- " & ("The package does not exist") & ";\n\n" & ("Please retry!")
ma soprattuttto rende + semplice la traduzione non dovendo ricopiare la punteggiatura e i ritorni a capo
questo inoltre, dovrebbe essere più corretto se il file po viene poi analizzato da altri programmi come ad esempio potraslator