I've been trying to figure out why Java applets wouldn't work on my system in Opera. (I'm using jre/jdk from [community], not openjdk6 from [extra].) From what I've found out: you set up a "Java directory" in Opera preferences (this path is then written to .opera/javapath.txt) and Opera looks for libjava.so there. At the same time Opera also looks for libjvm.so there (or it is the first place where Opera looks, more on that bellow). The problem is that jre package contains libjava.so in /opt/java/jre/lib/amd64/, while libjvm.so is in "server" subdirectory (/opt/java/jre/lib/amd64/server). That causes Opera not to find it and disable Java completely.
I ran strace and these are relevant lines to show where Opera tries to find libjvm.so: open("/opt/java/jre/lib/amd64/libjvm.so", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/lib/opera/10.00/libjvm.so", O_RDONLY) = -1 ENOENT (No such file or directory) open("/opt/java/jre/lib/amd64/libjvm.so", O_RDONLY) = -1 ENOENT (No such file or directory) open("/opt/java/jre/lib/amd64//native_threads/libjvm.so", O_RDONLY) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 107 open("/lib/libjvm.so", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/lib/libjvm.so", O_RDONLY) = -1 ENOENT (No such file or directory)
This lead me to an idea of creating symlink to /opt/java/jre/lib/amd64/server/libjvm.so in /usr/lib/opera/10.00, which worked and now I can see applets in Opera properly. Now the question is, who's fault is it? Opera's? Jre's? And more importantly, can it be solved in a way that doesn't require users to create symlinks as root? Either opera package could create the aforementioned link, only that is ugly for those not using jre package. Or jre package could create the link into /opt/java/jre/lib/amd64/. Or maybe even move the files from the "server" subdirectory to the upper directory (there are only three of them and I have no idea why they are in such a subdirectory)?
Does anyone have a better idea? Perhaps adding /opt/java/jre/lib/amd64/server/ to LD_LIBRARY_PATH inside the opera shell script?