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
~
~
~

wine-0.9.59, OpenSolaris and Picasa

New release, new features, new bug fixes and new bugs.
Let’s start with compiling.

Compiling

  • You do not need to use –without-ldap anymore
    I used just two options: –disable-win16 and –without-capi (does anybody use ISDN?).
  • Do not forget the tricks from Part I and Part II
  • New error I haven’t seen before:
    ../../tools/wrc/wrc --nostdinc -I. -I. -I../../include -I../../include   -DBUILD_SHA1=\"$(GIT_DIR=../../.git git rev-parse HEAD 2>/dev/null)\" -fowinetest.res winetest.rc
    /bin/sh: syntax error at line 1: `(' unexpected
    gmake: *** [winetest.res] Error 2

    Not sure if and why git is needed here, but I simply removed (commented) the following line from programs/winetest/Makefile:

    EXTRARCFLAGS = -DBUILD_SHA1=\"$$(GIT_DIR=$(TOPSRCDIR)/.git git rev-parse HEAD 2>/dev/null)\"

Applications
According to the Announcement, the following bugs (among others) were fixed in 0.9.59:

  • 2866 Support for X11 multi head configurations (Xinerama)
    I use Xinerama, but I haven’t noticed anything wrong about it, it was always working
  • 4528 Firefox vertical size wrong, doesn’t take gnome system menu or task
    bars into account
    Yes, it works correctly now. But Firefox 3 beta 5 crashes every 3 seconds 😉
  • 11574 Picasa cannot upload to web albums
    Still does not work for me. But instead it eats all possible and impossible CPU and memory resources:

    #top
    PID USERNAME LWP PRI NICE  SIZE   RES STATE    TIME    CPU COMMAND
    3731 alekz      9  28    4   26M   12M sleep    2:37   102% wine
    3710 alekz     11  38    4  134M  100M sleep    1:26 99.62% wine
    3713 alekz      1  28    4  109M  106M run     20:32 96.60% wineserver
    . . .

    And this is after I killed Picasa:

    PID USERNAME LWP PRI NICE  SIZE   RES STATE    TIME    CPU COMMAND
    3731 alekz     10   0    4   26M   12M cpu      8:06   102% wine
    3713 alekz      1   0    4  406M  404M cpu     26:46 99.85% wineserver

    I stopped Picasa, one process is gone, but what wine is doing now??! Also look at the consumed memory, it’s constantly increasing.

OpenSolaris Forum

There is a possibility that a Wine Community will be created for OpenSolaris. (aka Nevada, aka Solaris 11). BTW, you can try to use the wine configuring script (see further in the thread), but it does not solve the above mentioned problems, so do not waste your time.

Replacing a DiskSuite (Solaris Volume Manager) disk

A short guide on how to recover a broken DiskSuite mirror.

  1. Check metastat information:
    # metastat -c
    d30              m   34GB d31 (maint) d32
    
      d31 s 34GB c0t0d0s3 (maint) d32 s 34GB c0t1d0s3
    d20 m 4.0GB d21 (maint) d22
      d21 s 4.0GB c0t0d0s1 (maint) d22 s 4.0GB c0t1d0s1
    d10 m 30GB d11 (maint) d12
      d11 s 30GB c0t0d0s0 (maint) d12 s 30GB c0t1d0s0
    hsp001 h -
  2. Remove the broken replicas from the metadb :
    # metadb -i
            flags           first blk       block count
          W   p  l          16              8192            /dev/dsk/c0t0d0s7
          W   p  l          8208            8192            /dev/dsk/c0t0d0s7
         a m  p  luo        16              8192            /dev/dsk/c0t1d0s7
         a    p  luo        8208            8192            /dev/dsk/c0t1d0s7
    . . .
    
    # metadb -d /dev/dsk/c0t0d0s7
  3. Replace the broken disk
  4. Check that the new disk is visible:
    # format
    Searching for disks...done
    
    AVAILABLE DISK SELECTIONS:
    
      0. c0t0d0 /pci@1c,600000/scsi@2/sd@0,0 1. c0t1d0 /pci@1c,600000/scsi@2/sd@1,0
  5. Copy the partition table from the healthy to the new disk:
    # prtvtoc /dev/rdsk/c0t1d0s0 | fmthard -s - \
    /dev/rdsk/c0t0d0s0
    fmthard:  New volume table of contents now in place.
  6. Create metadb replicas (for example, 2 copies in slice 7):
    # metadb -a -c2 /dev/rdsk/c0t0d0s7
  7. Verifying the metadb:
    # metadb -i
    
      flags first blk block count
    a u 16 8192 /dev/dsk/c0t0d0s7 a u 8208 8192 /dev/dsk/c0t0d0s7 a p luo 16 8192 /dev/dsk/c0t1d0s7 a p luo 8208 8192 /dev/dsk/c0t1d0s7
  8. “Metareplace” the failed slices:
    # metastat | fgrep replace
    Invoke: metareplace d30 c0t0d0s3
    Invoke: metareplace d20 c0t0d0s1
    Invoke: metareplace d10 c0t0d0s0
    
    # metareplace -e d30 c0t0d0s3
    d30: device c0t0d0s3 is enabled
    # metareplace -e d20 c0t0d0s1
    d20: device c0t0d0s1 is enabled
    # metareplace -e d10 c0t0d0s0
    d10: device c0t0d0s0 is enabled
    
  9. Periodically check the resyncing status:
    # metastat | fgrep esync
    State: Resyncing
    Resync in progress: 0 % done
    State: Resyncing
    c0t0d0s3          0     No       Resyncing   Yes
    State: Resyncing
    Resync in progress: 19 % done
    State: Resyncing
    c0t0d0s1          0     No       Resyncing   Yes
    State: Resyncing
    Resync in progress: 2 % done
    State: Resyncing
    c0t0d0s0          0     No       Resyncing   Yes

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:

iiim-properties sets the hot-keys ( <Ctrl>-<space> by default) and available languages

The following processes must be running:

  • iiim-xbe
  • /usr/bin/iiimx -iiimd
  • iiimd -nodaemon -desktop -udsfile /tmp/.iiim-username/:3.0 \
         -vardir /export/home/username...

If no processes are running they can be started with:

/usr/bin/iiimx -iiimd

The processes are supposed to be started during the logging in by /usr/dt/config/Xsession.d/0020.dtims

If $DTSTARTIMS is set to True:

it calls either /usr/dt/config/$LANG/0020.dtims (if it exists)

or /usr/openwin/lib/locale/common/dtims and if ($LANG ends up in .UTF-8 or contains .UTF-8@) /usr/openwin/lib/locale/common/imsscript/S505multi

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:

Undefined                       first referenced
symbol                             in file
isinf                               surface_base.o
ld: fatal: Symbol referencing errors. No output written to wined3d.dll.so
collect2: ld returned 1 exit status
winegcc: gcc failed
gmake[2]: *** [wined3d.dll.so] Error 2
gmake[2]: Leaving directory `/var/tmp/wine-0.9.57/dlls/wined3d'
gmake[1]: *** [wined3d] Error 2
gmake[1]: Leaving directory `/var/tmp/wine-0.9.57/dlls'
gmake: *** [dlls] Error 2

The isinf related discussion can be found here.