X libs and X fonts

Alan Coopersmith wrote :

FreeType2 is what converts a TTF or other font file into a pattern of bits displayed on the screen, but it has lots of flags that control how that’s done (anti-aliasing, hinting, LCD optimization, etc.).

Xft2 is the library that calls FreeType to get a bit pattern and then displays that bit pattern on the X server, via either the Render extension or plain Xlib (but plain Xlib is slow).

fontconfig is the library that finds /usr/X11/lib/X11/fonts/TTF/Times.ttf when you ask for “Times Roman 12”. (It’s called by either Xft2 or pango, I forget which.)

pango is the library that calls Xft with a list of glyphs and locations to display them at, after determining what ordering and spacing they should be laid out in, and what glyphs to display for a given character string (which is much easier for English than for languages like Arabic
or Hindi).

GTK+ is the library that applications call to draw their interface on screen (the toolkit), and it calls pango to draw the text portion of those interfaces.

I’m not sure if cairo calls pango or goes direct to Xft2.

Firefox 3.0 and Solaris

Just a brain dump.

SqueezeCenter 7.1 under Solaris

The idea was to use “bare” SqueezeCenter without bundled CPAN (the CPAN directory was moved away) modules, Solaris 11 (or Nevada build 88) and supplied with Solaris PERL and MySQL.

Then if you start slimserver.pl the errors will let you know which CPAN modules to install. For example:

The following modules failed to load: version JSON::XS YAML::Syck GD
. . .
Can’t locate JSON::XS.pm in @INC (@INC contains: squeezecenter-7.1-19407-noCPAN/CPAN/arch/5.8/i86pc-solaris-64int

Or For Nevada b95:

The following CPAN modules were found but cannot work with SqueezeCenter:
File::Temp (loaded 0.14, need 0.17)
I18N::LangTags (loaded 0.29, need 0.35)

To fix this problem you have several options:
1. Install the latest version of the module(s) using CPAN: sudo cpan Some::Module
2. Update the module’s package using apt-get, yum, etc.
3. Run the .tar.gz version of SqueezeCenter which includes all required CPAN modules.

Usually, the bundled CPAN is not up to date. So, let’s install it first:

# perl -MCPAN -e shell
cpan[1]> install Bundle::CPAN
. . .
cpan[2]> quit

To install (or upgrade) a module run the following:

# perl -MCPAN -e shell
cpan[1]> install JSON::XS

The only exception is Encode/Detect/Detector.pm or Encode::Detect::Detector. It’s has not being touched by the developer for many years and is not recommended for use. The module can be compiled with c++ or g++ (instead of used by default cc or gcc), but with a lot of pain and manual intervention. The easiest way is to get rid of it completely:

  • Remove Encode::Detect::Detector from modules.conf (in the root directory of SqueezeCenter)
  • Remove or comment the following line in Slim/Utils/Unicode.pm:
    use Encode::Detect::Detector;

What process is using this port?

If lsof is installed in your system:

xeon# lsof 2>/dev/null | fgrep :telnet
telnet 18409 alekz 4u IPv4 0xffffff0e3b19c740 0t0 TCP xeon:52431->10.0.0.1:telnet (UknownState_-2094513781)

xeon# lsof 2>/dev/null | fgrep :8080
firefox-b 699 alekz 52u IPv4 0xffffff02db1e0780 0t110637 TCP xeon:51567->dmz:8080 (UknownState_-2094513781)
firefox-b 699 alekz 67u IPv4 0xffffff0e3b0e06c0 0t127870 TCP xeon:47231->dmz:8080 (UknownState_-2094513781)
squid 2778 nobody 8u IPv4 0xffffff01dc8ce080 0t0 TCP *:8080 (UknownState_-359969560)
squid 2778 nobody 22u IPv4 0xffffff01dc6d36c0 0t110637 TCP dmz:8080->xeon:51567 (UknownState_-2094513781)
squid 2778 nobody 41u IPv4 0xffffff01dc8c26c0 0t127870 TCP dmz:8080->xeon:47231 (UknownState_-2094513781)

If lsof is not installed:

  • Run pfiles /proc/* | less
  • Search for port:
    • Press </>
    • Type port: 23
    • Press <Enter>

The result may look like:

18409: telnet 10.0.0.1
. . .
4: S_IFSOCK mode:0666 dev:318,0 ino:42212 uid:0 gid:0 size:0
O_RDWR|O_NDELAY
SOCK_STREAM
SO_OOBINLINE,SO_SNDBUF(49152),SO_RCVBUF(49640)
sockname: AF_INET 10.0.0.2 port: 52431
peername: AF_INET 10.0.0.1 port: 23
~
~
~

Switching keyboard layouts and IIIM

Internet/Intranet Input Method (IIIM) is a distributed Input Method solution that provides Input support for Java & X11 clients via Internet/Intranet. The related documentation can be found here.

When I upgraded from snv_83a to snv_85 I lost the ability to switch layouts. This is what I discovered:

Continue reading “Switching keyboard layouts and IIIM”

How to compile wine under Solaris. Part II

See Part I

Beginning with wine 0.9.57 “-lsunmath” is needed. You can get the libsunmath library from blastwave, for example:

LIBS      = -lsocket -lnsl -lintl -L/opt/csw/lib -lsunmath

This is the error you might get if the library is not specified in dlls/wined3d/Makefile:

Continue reading “How to compile wine under Solaris. Part II”