Estaba este fin de semana intentando ejecutar un programa en java, el cridmanager, para poder utilizar desde el ordenador algunas de las funciones del mi nuevo y flamante PVR. Bien, el caso es que tras ejecutar el programita en cuestion, me aparece una ventana sin ningun tipo de control, solo la ventana vacia.
Despues de comentarlo en los foros de ubuntu, pensando que era un problema con el final de las lineas dentro del codigo, alguien alli me comento que habia un bug en el java 6 cuando se esta ejecutando beryl. Afortunadamente en el wiki de beryl nos comentan como aplicar un pequeño parche para corregirlo.
Aunque en esa pagina esta bastante bien descrito el problema y la solucion, e incluso existe un script para hacerlo automaticamente (en mi caso no funciono bien), en mi caso tuve que modificar algunas de las instrucciones antes de ejecutarlas para poder conseguir que me funcionara. Dicho esto, describo los pasos que yo seguir para parchearlo.
Se crean dos directorios temporales (que podremos borrar una vez terminado el proceso) y se extraen las clases del java.
mkdir -p /tmp/java/src
mkdir -p /tmp/java/rt
cp /usr/lib/jvm/java-6-sun-1.6.0.00/jre/lib/rt.jar /usr/lib/jvm/java-6-sun-1.6.0.00/jre/lib/rt.jar.orig
cp /usr/lib/jvm/java-6-sun-1.6.0.00/jre/lib/rt.jar /tmp/java/rt/rt.zip
cd /tmp/java/rt
unzip rt.zip
Descargamos el codigo fuente de java desde la pagina de sun.
cd ../src
wget http://www.java.net/download/jdk6/6u2/promoted/b01/jdk-6u2-ea-src-b01-jrl-29_mar_2007.jar
Despues descomprimimos este codigo. Notese que si todavia se esta usando beryl, hay que cambiar al metacity para poder aceptar la licencia. En caso contrario en la licencia apareceria una ventana en blanco como la de la aplicacion que queria ejecutar inicialmente.
java -jar jdk-6u2-ea-src-b01-jrl-29_mar_2007.jar
Aceptar la licencia y seleccionar como directorio de destino en el que estamos, es decir /tmp/java/src.
Ahora nos queda crearnos un ficherito con el parche y aplicarlo. Para ello con nuestro editor de texto favorito crearemos un fichero llamado patch y en el copiaremos el siguiente texto:
diff -ur src.orig/j2se/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java src/j2se/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java
--- src.orig/j2se/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java 2007-02-24 08:21:07.000000000 -0500
+++ src/j2se/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java 2007-02-24 08:23:40.000000000 -0500
@@ -692,7 +692,7 @@
// ConfigureNotify, only the one from X with zero
// coordinates. This is the workaround to get real
// location, 6261336
- // Do the same for non-reparenting WMs (Compiz, Looking Glass)
+ // Do the same for non-reparenting WMs (Compiz, Looking Glass, Beryl)
switch (XWM.getWMID()) {
case XWM.CDE_WM:
case XWM.MOTIF_WM:
@@ -700,6 +700,7 @@
case XWM.SAWFISH_WM:
case XWM.COMPIZ_WM:
case XWM.LG3D_WM:
+ case XWM.BERYL_WM:
{
Point xlocation = queryXLocation();
if (log.isLoggable(Level.FINE)) log.log(Level.FINE, "New X location: {0}", new Object[]{xlocation});
diff -ur src.orig/j2se/src/solaris/classes/sun/awt/X11/XWM.java src/j2se/src/solaris/classes/sun/awt/X11/XWM.java
--- src.orig/j2se/src/solaris/classes/sun/awt/X11/XWM.java 2007-02-24 08:21:07.000000000 -0500
+++ src/j2se/src/solaris/classes/sun/awt/X11/XWM.java 2007-02-24 08:22:58.000000000 -0500
@@ -79,7 +79,8 @@
ICE_WM = 10,
METACITY_WM = 11,
COMPIZ_WM = 12,
- LG3D_WM = 13;
+ LG3D_WM = 13,
+ BERYL_WM = 14;
public String toString() {
switch (WMID) {
case NO_WM:
@@ -106,6 +107,8 @@
return "Compiz";
case LG3D_WM:
return "LookingGlass";
+ case BERYL_WM:
+ return "Beryl";
case UNDETERMINED_WM:
default:
return "Undetermined WM";
@@ -534,6 +537,10 @@
return isNetWMName("LG3D");
}
+ static boolean isBeryl() {
+ return isNetWMName("beryl");
+ }
+
/*
* Is Metacity running?
*/
@@ -546,7 +553,7 @@
}
static boolean isNonReparentingWM() {
- return (XWM.getWMID() == XWM.COMPIZ_WM || XWM.getWMID() == XWM.LG3D_WM);
+ return (XWM.getWMID() == XWM.COMPIZ_WM || XWM.getWMID() == XWM.LG3D_WM || XWM.getWMID() == XWM.BERYL_WM);
}
/*
@@ -738,6 +745,8 @@
awt_wmgr = XWM.COMPIZ_WM;
} else if (isLookingGlass()) {
awt_wmgr = LG3D_WM;
+ } else if (isBeryl()) {
+ awt_wmgr = BERYL_WM;
} else if (doIsIceWM && isIceWM()) {
awt_wmgr = XWM.ICE_WM;
}
@@ -1387,6 +1396,7 @@
case XWM.ENLIGHTEN_WM:
return readInsetsArray(window, XA_E_FRAME_SIZE, insets);
case XWM.COMPIZ_WM:
+ case XWM.BERYL_WM:
return readInsetsArray(window, XA_FRAME_EXTENTS, insets);
default:
return false;
Le damos al fichero permisos de ejecucion y aplicamos el parche:
chmod +x patch
patch -p1 < patch
Se eliminan las clases que hemos modificado y las sustituimos por estas mismas modificadas.
cd ../rt
rm sun/awt/X11/XDecoratedPeer*
rm sun/awt/X11/XWM.*
rm sun/awt/X11/XWM\$*
cp ../src/j2se/src/solaris/classes/sun/awt/X11/XWM.java sun/awt/X11
cp ../src/j2se/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java sun/awt/X11
Hecho esto solo queda compilar de nuevo las clases, empaquetarlas y sustituir las antiguas por las nuevas.
javac -d . sun/awt/X11/*.java
zip -f rt.zip sun/awt/X11/*
cp rt.zip /usr/lib/jvm/java-6-sun-1.6.0.00/jre/lib/rt.jar
Ahora ya podemos ejecutar aplicaciones java con toda normalidad.





Junio 26th, 2007 at 04:44
Pues probé la solución que mencionas y sigo teniendo el mismo problema. ¿Qué podrpodría estar fallando?
Junio 26th, 2007 at 08:25
No sabría decirte, yo segui el manual del wiki de beryl al pie de la letra. Se me ocurre que preguntes en los foros de OpenCompositing que es donde ahora se habla de beryl, compiz y la fusión de ambos compiz fusion.
Abril 18th, 2009 at 19:39
Hola!
Yo lo he solucionado editando el archivo /etc/environment y agrengando la siguiente linea: AWT_TOOLKIT=”MToolkit”
$ sudo gedit /etc/environment
AWT_TOOLKIT=”MToolkit”
Espero que os valga a vosotros tambien
Un saludo