Home Developement
java: xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock' failed PDF Stampa E-mail
GNU/Linux - Tips 'n Tricks
Scritto da E. Mottola   
Mercoledì 28 Gennaio 2009 16:58

Su Linux se un applicazione Java come Matlab o Netbeans non si avvia, spesso si è incappati in questo problema.

Il responsabile dell'errore in questione che blocca l'avvio di applicazioni java è la libreria libmawt.so che è presente nella JRE o JDK in uso. Qusta libreria contiene delle righe sbagliate, nello specifico quelle relative al supporto per XINERAMA per la gestione multi-monitor.

La soluzione è molto semplice ma bisogna individuare con precisione quale JRE o JDK stiamo usando, sia perchè ne possono essere installate più di una, sia perchè alcuni software ne installano una propria, come appunto Matlab.

 

Con Gentoo per vedere lo stato delle virtual machine Java in uso, basta digitare dal proprio utente:

$ eselect java-vm list

Available Java Virtual Machines:
  [1]   blackdown-jdk-1.4.2
  [2]   emul-linux-x86-java-1.6
  [3]   sun-jdk-1.5
  [4]   sun-jdk-1.6  system-vm user-vm
  [5]   sun-jre-bin-1.6

 

Dall'output si vede che sia la virtual machine di sistema che quella dell'utente corrente sono impostati a sun-jdk-1.6.

In questo caso la libreria incriminata si trova nel percorso

# /usr/lib/jvm/sun-jdk-1.6/jre/lib/amd64/xawt/libawt.so 

 

Chi utilizza un sistema 32bit nel precedente percorso non avrà ovviamente la directory amd64 ma i386.

 

Una volta individuato il percorso della libreria si può finalmente sistemare il bug.

# sed -i 's/XINERAMA/FAKEEXTN/g' /usr/lib/jvm/sun-jdk-1.6/jre/lib/amd64/xawt/libawt.so 

Il comando sed non fa altro che sostituire a tutte le occorrenze della parola XINERAMA la stringa FAKEEXTN disabiltando così il supporto da cui dipende l'errore.

 

Se il problema si riscontra con Matlab allora bisognerà applicare questa modifica alla libreria libawt.so all'interno del suo percorso di installazione perchè appunto Matlab installa una sua JRE. Quindi il comando sarà del tipo:

# sed -i 's/XINERAMA/FAKEEXTN/g' /opt/MATHWORKS_R2008A/sys/java/jre/glnxa64/jre1.6.0/lib/amd64/xawt/libmawt.so

 

Volendo essere drastici, la modifica in questione si può applicare a tutte le JRE/JDK installate nel sistema semplicemente trovando prima tutte le librerie libmawt.so installate:

# updatedb
# slocate xawt/libmawt.so

 

E poi applicare il comando sed di sopra a tutti i percorsi risultanti dall'output del comando slocate.

 

Happy Java!

 

 

Ultimo aggiornamento Mercoledì 28 Gennaio 2009 19:50
 

Utenti connessi

 96 visitatori online



Creative Commons License

Questo sito è pubblicato sotto licenza Creative Commons
DeSfA - De Shell Facemmo Ali