Trinity desktop environment 14.1.5
Benvenuti nella pagina Wiki di Simone Giustetti.
Lingue: English - Italiano
TDE 14.1.5 su Slackware 15.0
Lo scorso Novembre, ad inizio del mese, è stato rilasciato l'ultimo aggiornamento ufficiale del ramo stabile del Trinity Desktop Environment: la versione 14.1.5. TDE è un ambiente grafico completo per Linux ed altri sistemi operativi della famiglia UNIX nato dalle ceneri di KDE 3, ma ormai sviluppato indipendentemente da quest'ultimo. Il nuovo rilascio si propone di risolvere tutti i problemi segnalati dagli utenti nel corso del semestre precedente e di apportare ulteriori migliorie al software. A causa di un eccesso di lavoro non ho potuto occuparmi della compilazione di TDE 14.1.5 all'epoca del rilascio; tornato a ritmi più tranquilli posso finalmente cimentarmi nell'impresa.
Come sempre gli sviluppatori di TDE hanno portato avanti il lavoro di aggiornamento e pulizia del codice. Una delle modifiche maggiormente impattanti ha consistito nella rinomina del pacchetto TQt3 in TQt. Il cambio di nome si presenta come una banalità, ma purtroppo le librerie TQt sono le fondamenta dell'intero ambiente grafico e le ripercussioni hanno interessato tutti gli altri pacchetti, anche quelli apparentemente slegati come le estensioni per i linguaggi di programmazione:
- Perl attraverso la libreria libTQt-Perl;
- Python attraverso al libreria PyTQt.
il cui aggiornamento ha presentato una sfida complicata, insuperabile nel caso di Perl. Per un elenco completo delle modifiche introdotte si rimanda alle note di rilascio (In inglese). Le istruzioni di compilazione sono riportate nel seguito del presente articolo.
PyTQt
Il pacchetto PyTQt contiene le librerie necessarie per scrivere in linguaggio Python programmi ed applicazioni integrati in TDE. Le librerie sono sempre state incluse nel progetto, inizialmente chiamate Python-TQt sono state rinominate in occasione del rilascio della versione 14.1.0. Rinominare TQt3 in TQt ha comportato la conseguente modifica dei nomi di molti file del progetto e, soprattutto, di molte funzioni e variabili di ambiente contenute nelle librerie condivise, che sono state adattate alla nuova nomenclatura. I file header sono stati interessati dall'aggiornamento con problemi per la compilazione di alcuni pacchetti tra cui PyTQt.
La compilazione del codice sorgente non modificato incluso nell'archivio fallisce lamentando l'impossibilità di reperire il numero di versione delle librerie TQt:
Error: The TQt version number could not be determined by parsing /opt/trinity/include/tqglobal.h.
Un errore alquanto strano dato che le librerie vengono compilate ed installate prima dei binding e che praticamente nessuno degli altri pacchetti presenta problemi analoghi in fase di compilazione. Trattandosi delle librerie fondamentali su cui si basa l'intero ambiente grafico, l'errore dovrebbe interessarli tutti. Non scrivendo abitualmente codice Python, la sua assenza non mi avrebbe causato particolari fastidi, ma il mio scopo è sempre stato quello di produrre pacchetti funzionanti per l'intero ambiente grafico di base, per cui ho deciso di indagare le cause del malfunzionamento alla ricerca di una soluzione.
Dopo aver eseguito alcune sessioni di debug sono giunto alla conclusione che il problema risieda nel file configure.py che ha il compito di assegnare i valori corretti ai parametri di compilazione per il pacchetto. La porzione di codice interessata incomincia dalla riga 1090:
...
# Check the TQt header files have been installed.
tqglobal = os.path.join(tqt_incdir, "tqglobal.h")
if not os.access(tqglobal, os.F_OK):
tqglobal = os.path.join(tqt_incdir, "ntqglobal.h")
if not os.access(tqglobal, os.F_OK):
sip_tqt_config.error("tqglobal.h or ntqglobal.h could not be found in %s." % tqt_incdir)
...
Il file header tqglobal.h contine le seguenti righe di codice:
#ifndef TQT_TQGLOBAL_H
#define TQT_TQGLOBAL_H
#include <tqt.h>
#include <ntqglobal.h>
#endif /* TQT_TQGLOBAL_H */
Da cui si evince che le istruzioni di assegnazione debbano risiedere nel file ntqglobal.h e che tqglobal.h sia presente probabilmente per compatibilità. Tale soluzione non arreca problemi al preprocessore dei linguaggi C o C++, che importa il contenuto dei file elencati, ma il linguaggio Python non ha ragione di eseguire l'inclusione dato che non comprende la sintassi di C e derivati. In questo caso la soluzione banale consiste nel leggere direttamente il contenuto del file header ntqglobal.h. Ho verificato la mia teoria creando la seguente patch:
*** configure.py 2025-11-26 19:31:50.000000000 +0100
--- configure.py 2025-11-26 19:30:14.000000000 +0100
***************
*** 1091,1097 ****
macros["LIBDIR_TQT"] = tqt_libdir
# Check the TQt header files have been installed.
! tqglobal = os.path.join(tqt_incdir, "tqglobal.h")
if not os.access(tqglobal, os.F_OK):
tqglobal = os.path.join(tqt_incdir, "ntqglobal.h")
--- 1091,1097 ----
macros["LIBDIR_TQT"] = tqt_libdir
# Check the TQt header files have been installed.
! tqglobal = os.path.join(tqt_incdir, "ntqgloba.h")
if not os.access(tqglobal, os.F_OK):
tqglobal = os.path.join(tqt_incdir, "ntqglobal.h")
***************
*** 1112,1118 ****
else:
tqconfigdir = tqt_incdir
! tqconfig = os.path.join(tqconfigdir, "tqconfig.h")
if not os.access(tqconfig,os.F_OK):
tqconfig = os.path.join(tqconfigdir, "ntqconfig.h")
--- 1112,1118 ----
else:
tqconfigdir = tqt_incdir
! tqconfig = os.path.join(tqconfigdir, "ntqconfig.h")
if not os.access(tqconfig,os.F_OK):
tqconfig = os.path.join(tqconfigdir, "ntqconfig.h")
e facendo in modo che venisse applicata al codice sorgente dal file SlackBuild aggiungendo le seguenti righe di codice:
# Patch the configure.py script for the right configuration.
patch -p0 -i ${SRCDIR}/configure.patch
Tanto è bastato per risolvere il problema di compilazione ed ottenere un pacchetto PyTQt funzionante. Sia la patch che il file SlackBuild aggiornato sono stati inclusi nell'archivio contenente il build tree. Non si tratta di un a soluzione molto pulita. Provvederò a contattare gli sviluppatori di TDE per segnalare il problema ed aggiornare il file SlackBuild se fossero rilasciate delle patch.
LibTQt-Perl
Anche LibTQt-Perl, la libreria che include i collegamenti al linguaggio Perl 5, presenta problemi nella versione 14.1.5 di TDE. Anche in questo caso ho ricercato le cause degli errori, ma non sono arrivato ad una soluzione essendo necessario apportare modifiche al codice Perl che, purtroppo, non conosco. Andando con ordine: Cercando di compilare un pacchetto a partire dal codice presente nell'archivio libtqt-perl-trinity-14.1.5.tar.xz si ottiene il seguente errore:
config.status: creating smoke/tqt/generate.pl readline() on closed filehandle DEFS at generate.pl line 77. Can't locate Ast.pm in @INC (you may need to install the Ast module) (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5/usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5) at kalyptus line 17. BEGIN failed--compilation aborted at kalyptus line 17. config.status: error: cannot find input file: `smoke/Makefile.in'
In sostanza l'interprete Perl non trova un modulo necessario per popolare i parametri di configurazione ed esce segnalando il problema incontrato. Eseguendo una ricerca nel codice sorgente, ho riscontrato la presenza del modulo richiesto in una cartella del codice sorgente:
ls -lah kalyptus/ total 984K drwxr-xr-x 2 root root 4.0K Apr 3 2025 . drwxr-xr-x 10 root root 4.0K Jan 12 14:12 .. -rw-r--r-- 1 root root 2.2K Apr 3 2025 Ast.pm -rw-r--r-- 1 root root 17K Apr 3 2025 ChangeLog -rw-r--r-- 1 root root 12K Apr 3 2025 Iter.pm -rw-r--r-- 1 root root 51 Apr 3 2025 Makefile.cvs ...
Ho pertanto provveduto ad aggiungere il percorso relativo a quelli già memorizzati nella variabile @INC modificando opportunamente lo script SlackBuild ed aggiungendo una dichiarazione per la variabile PERL5LIB:
export DEBUG_AUTOTOOL_OPT="--disable-debug"
# Upgrade @INC path list to include the Ast.pm module for each submodule
export PERL5LIB=${TMP}/tmp-${PRGNAM}/${PRGNAM}-${SRCVER}/kalyptus
# Enter sources directory.
cd ${TMP}/tmp-${PRGNAM}/${DIR_SRC}
A seguito della modifica lo script di configurazione procede oltre alle righe problematiche solo per incagliarsi nuovamente poco dopo rendendo il messaggio di errore:
config.status: creating smoke/tqt/generate.pl readline() on closed filehandle DEFS at generate.pl line 77. Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at /tmp/build/tmp-libtqt-perl/libtqt-perl-trinity-14.1.5/kalyptus/kdocAstUtil.pm line 680. Compilation failed in require at kalyptus line 20. BEGIN failed--compilation aborted at kalyptus line 20. config.status: error: cannot find input file: `smoke/Makefile.in'
Il problema sembra legato alla seguente riga del modulo Perl kdocAstUtil.pm ed in particolare alla presenza dell'istruzione define che il messaggio di errore consiglia di rimuovere. Ho provveduto a realizzare una patch allo scopo:
*** ./kalyptus/kdocAstUtil.pm 2026-01-12 16:59:17.000000000 +0100
--- ./kalyptus/kdocAstUtil.pm 2026-01-12 16:44:14.000000000 +0100
***************
*** 676,682 ****
dumpAst( $kid );
}
! print "\t" x $depth, "Documentation nodes:\n" if defined
@{ $node->{Doc}->{ "Text" }};
foreach $kid ( @{ $node->{Doc}->{ "Text" }} ) {
--- 676,682 ----
dumpAst( $kid );
}
! print "\t" x $depth, "Documentation nodes:\n" if
@{ $node->{Doc}->{ "Text" }};
foreach $kid ( @{ $node->{Doc}->{ "Text" }} ) {
La cui applicazione permette allo script di ultimare correttamente la fase di configurazione e di passare alla successiva fase di compilazione e di fallire quasi immediatamente segnalando problemi inerenti la libreria smoke: utilizzata per generare i collegamenti tra le librerie TQt e i linguaggi di programmazione interpretati quali Perl.
make all-recursive
make[1]: Entering directory '/tmp/build/tmp-libtqt-perl/libtqt-perl-trinity-14.1.5'
Making all in smoke
make[2]: Entering directory '/tmp/build/tmp-libtqt-perl/libtqt-perl-trinity-14.1.5/smoke'
Making all in tqt
make[3]: Entering directory '/tmp/build/tmp-libtqt-perl/libtqt-perl-trinity-14.1.5/smoke/tqt'
/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I./.. -I/opt/trinity/include -I. -include tqt.h -DTQT_THREAD_SUPPORT -D_REENTRANT -Wno-long-long -Wundef -Wall -W -Wpointer-arith -DNDEBUG -DNO_DEBUG -O2 -O2 -march=i486 -mtune=i686 -Wno-non-virtual-dtor -fno-exceptions -fno-check-new -fno-common -I/usr/include/tqt -MT smokedata.lo -MD -MP -MF .deps/smokedata.Tpo -c -o smokedata.lo smokedata.cpp
libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I./.. -I/opt/trinity/include -I. -include tqt.h -DTQT_THREAD_SUPPORT -D_REENTRANT -Wno-long-long -Wundef -Wall -W -Wpointer-arith -DNDEBUG -DNO_DEBUG -O2 -O2 -march=i486 -mtune=i686 -Wno-non-virtual-dtor -fno-exceptions -fno-check-new -fno-common -I/usr/include/tqt -MT smokedata.lo -MD -MP -MF .deps/smokedata.Tpo -c smokedata.cpp -fPIC -DPIC -o .libs/smokedata.o
smokedata.cpp:18410:35: error: ‘mf_ctor’ is not a member of ‘Smoke’
18410 | {1, 1747, 6253, 2, Smoke::mf_ctor, 9, 7}, //7 TQAccel::TQAccel(TQWidget*, const char*)
| ^~~~~~~
smokedata.cpp:18411:35: error: ‘mf_ctor’ is not a member of ‘Smoke’
18411 | {1, 1747, 6129, 1, Smoke::mf_ctor, 9, 8}, //8 TQAccel::TQAccel(TQWidget*)
| ^~~~~~~
smokedata.cpp:18412:35: error: ‘mf_ctor’ is not a member of ‘Smoke’
18412 | {1, 1747, 6348, 3, Smoke::mf_ctor, 9, 9}, //9 TQAccel::TQAccel(TQWidget*, TQObject*, const char*)
| ^~~~~~~
smokedata.cpp:18413:35: error: ‘mf_ctor’ is not a member of ‘Smoke’
18413 | {1, 1747, 6345, 2, Smoke::mf_ctor, 9, 10}, //10 TQAccel::TQAccel(TQWidget*, TQObject*)
|
Qua mi sono fermato non vedendo una facile soluzione del problema. Sia la patch che lo script di compilazione modificato verranno aggiunti al build tree per consentire a chiunque abbia competenze maggiori delle mie di provare a produrre un pacchetto funzionante della libreria. Si sconsiglia l'aggiornamento alla versione 14.1.5 di TDE a chiunque utilizzi abitualmente Perl per scrivere applicazioni integrate.
Segue un sunto delle operazioni necessarie per installare TDE 14.1.5 a partire dagli archivi contenenti il codice sorgente. Per una descrizione dettagliata si rimanda alle numerose pagine dedicate a TDE presenti nel sito.
Compilazione dei Pacchetti
Per compilare TDE bisogna rimuovere versioni precedentemente installate sulla macchina, scollegarsi e rieseguire l'autenticazione, in modo da pulire l'ambiente di lavoro e le variabili di ambiente. Prima di incominciare, si consiglia di:
- Eseguire un back-up dei dati, delle directory di configurazione ˜/.trinity e del file ˜/.tderc localizzati nella home directory. A mia memoria la procedura di aggiornamento non ha mai causato la perdita di dati oppure la corruzione di file, ma è sempre consigliabile mettersi al riparo da esperienze spiacevoli.
- Rimuovere TDE significa rinunciare all'interfaccia grafica per il tempo necessario a ricompilarla. Un intervallo che dipende dalle prestazioni della macchina. Si consiglia di passare al runlevel 3 (Interfaccia testuale) per il resto della procedura:
init 3
- Rimuovere tutti i pacchetti installati di TDE. Per rimuovere, ad esempio, la versione 14.1.4 di TDE lanciate il comando:
removepkg /var/log/packages/*trinity-14.1.4*
- Cancellare eventuali script di configurazione "dimenticati" dal comando removepkg.
rm /etc/profile.d/tqt3.*
rm /etc/profile.d/trinity.*
- Eseguire un logout per poi collegarsi come root, in modo da reimpostare le variabili di ambiente e partire da una situazione ottimale.
- Installate o aggiornate i prerequisiti di TDE. Si tratta di una manciata di pacchetti tra cui:
- Heimdall;
- Imlib;
- Linxslt per chi necessitasse il supporto al debug di file XML;
- Compilatori ed altri strumenti di sviluppo;
- I linguaggi di programmazione da integrare in TDE (Opzionale).
Non facendolo alcune delle funzionalità del Trinity Desktop Environment non verranno incluse nei pacchetti finali.
Preparare il Build Tree
Trinity Desktop Environment è costituito da una cinquantina di pacchetti che devono essere compilati ed installati nel giusto ordine. Il codice sorgente è distribuito nella forma di un archivio tar di grosse dimensioni. L'archivio deve essere decompresso e gli archivi estratti devono essere spostati nelle opportune cartelle.
- Scaricare e decomprimere l'archivio contenente il build tree in una directory della propria Linux Box. Solitamente /tmp oppure /usr/src/tde-14.1.5.
- Scaricare e decomprimere l'archivio tar contenente il codice sorgente di tutti i pacchetti.
- Distribuire gli archivi compressi in cui è organizzato il codice sorgente nelle opportune directory. Ogni archivio avente estensione tar.xz deve essere salvato nella directory avente lo stesso nome.
- Impostare le opzioni di configurazione per l'architettura della macchina su cui si sta installando. Nel caso di un processore Amd a 64 bit, ad esempio, eseguire i seguenti comandi
rm TDE.options
ln -s TDE.options.x86_64 TDE.options
- Spostarsi nella directory contenete lo script principale: TDE.SlackBuild:
cd ./tde_build_script/bin
- Chi desiderasse preparare anche tutti i pacchetti di localizzazione, deve modificare lo script principale TDE.SlackBuild rimuovendo il commento dall'inizio della riga
# Build package
# bash ./${PKG}.SlackBuild
in modo che diventi:
# Build package
bash ./${PKG}.SlackBuild
- Lanciare lo script TDE.SlackBuild armandosi di pazienza.
sh ./TDE.SlackBuild
Lo script eseguirà la compilazione, l'installazione e la configurazione automatica di tutti i pacchetti. Il tutto richiederà svariate ore. Al termine dell'operazione, TDE sarà installato e pronto all'uso. Lo script si fermerà prima della naturale conclusione solo nel caso incontrasse errori quali dipendenze mancanti, compilatori o linguaggi mancanti e simili.
- È possibile testare il funzionamento del Trinity Desktop Environment lanciando il comando startx e aspettando che l'interfaccia grafica venga caricata.
- Per ultimo, chi è solito avviare la macchina in modalità grafica deve chiudere la sessione di TDE e ritornare nel runlevel 4.
init 4
Il Build Tree Aggiornato
Riporto un collegamento da cui scaricare un archivio che include tutti gli script di compilazione, le patch ed i file di configurazione: tde_build_tree_sg-14.1.5.tar.xz. L'archivio verrà aggiornato se e quando saranno rilasciate le patch per compilare il pacchetto LibTQt-Perl, inutilizzabile al momento del rilascio.
CONCLUSIONI
Il presente articolo ha descritto la procedura di installazione su Slackware Linux di TDE 14.1.5 a partire dal codice sorgente. I punti principali della procedura per utilizzare gli script con profitto sono coadiuvati di alcuni comandi di esempio. Tutti i test di compilazione, installazione, configurazione e successivo uso sono stati condotti su macchine Amd a 64 bit e x86 a 32 bit su cui gira una versione di Slackware Linux 15.0 aggiornata all'ultimo rilascio. In conclusione, si rinnovano i doverosi ringraziamenti agli sviluppatori di TDE per l'impegno e gli sforzi compiuti e si rimanda al prossimo rilascio ufficiale.
Per commenti, consigli, domande inviate una e-mail all'indirizzo studiosg [chiocciola] giustetti [punto] net.
Link esterni
- Home page di Slackware (In inglese)
- Slackware Linux per piattaforma ARM (In inglese)
- Home page del progetto TDE (In inglese)
- La pagina da cui scaricare il codice sorgente di TDE
- Note di rilascio per la versione 14.1.5 di TDE (In inglese)
Lingue: English - Italiano