Tag Archives: mac os x

Fink’s xinitrc, GNOME, and KDE

Fink’s xinitrc package provides similar functionality to X11 on 10.4 as is available on 10.5 and 10.6.   It provides Fink packages with a straightforward way to have executables run automatically when X11 is started without modifying the system area, instead using scripts in /sw/etc/xinitrc.d (assuming a default fink setup).  Moreover, when a package is removed, its script will also be removed.  Currently, the following packages use it:

  • dbus
  • kinput2
  • uim
  • user-ja
  • xfontpath

xinitrc is used by these packages on 10.5 and later as well as 10.4.  Since dbus is in the dependency chain for both GNOME and KDE, the behavior of xinitrc is important for users of those desktop environments.

Issues

xinitrc does have a side effect that needs to be taken into account.  It is set up, deliberately, to circumvent the default script setup from 10.5 or 10.6’s X11 with its own, similar, setup, cf.:
http://article.gmane.org/gmane.os.macosx.fink.devel/18879
and its default setup doesn’t search $HOME.xinitrc.d for user scripts.
Fortunately, it’s straightforward to do so, and the method provides 10.4 users with the ability to set up scripts in $HOME/.xinitrc.d, too.

Also, if you’re using xinitrc because other Fink packages Depend on it, you may lose some functionality if you need to reinstall X11 (e.g. if you’re using Xquartz on 10.5).  If so, then use

fink reinstall xinitrc

to restore it.

10.5 and 10.6

Basically, we just need a way to reactivate the existing handling of $HOME/.xinitrc.d .   The xinitrc package provides a couple of system administrator entry points.  Let’s use  one which gets processed after the script files that are installed by fink packages.  We can do this via the following steps:

  1. Edit /sw/etc/xinitrc-last-hook as a superuser (again assuming a default Fink path).
  2. Put the following in it:
    #!/bin/sh
    . /usr/X11/lib/X11/xinit/xinitrc.d/98-user.sh

    and save the file.

  3. That’s it! The next time you start X11, it will process any scripts in $HOME/.xinitrc.d .

10.4

10.4 requires writing the script that processes scripts in $HOME/.xinitrc.d :

  1. Edit /sw/etc/xinitrc-last-hook as a superuser (again assuming a default Fink path).
  2. Put the following in it:
    #!/bin/sh
    if [ -d "${HOME}/.xinitrc.d" ] ; then
    for f in "${HOME}"/.xinitrc.d/*.sh ; do
    [ -x "$f" ] && . "$f"
    done
    unset f
    fi

    and save the file.

  3. That’s it! The next time you start X11, it will process any scripts in $HOME/.xinitrc.d .

Setting up GNOME or KDE

To make sure that GNOME or KDE get started after any other apps, we will want to give their startup scripts names that get processed after anything else we want, e.g. ‘zzz-gnome.sh’.

Full GNOME Desktop

  1. Edit e.g. $HOME/.xinitrc.d/zzz-gnome-session.sh .
  2. Put the following in it (assuming a default Fink setup):
    #!/bin/sh
    . /sw/bin/init.sh
    metacity &
    exec gnome-session

    then save the file.

  3. Run
    chmod a+x $HOME/.xinitrc.d/zzz-gnome-session.sh

    to make the script executable.

Rootless GNOME

  1. Edit e.g. $HOME/.xinitrc.d/zzzz-gnome-panel.sh .
  2. Put the following in it (assuming a default Fink setup):
    #!/bin/sh
    . /sw/bin/init.sh
    metacity &
    exec gnome-panel

    then save the file.

  3. Run
    chmod a+x $HOME/.xinitrc.d/zzzz-gnome-panel.sh

    to make the script executable.

KDE3

  1. Edit e.g. $HOME/.xinitrc.d/zzzzz-kde3.sh .
  2. Put the following in it (assuming a default Fink setup):
    #!/bin/sh
    . /sw/bin/init.sh
    exec startkde

    then save the file.

  3. Run
    chmod a+x $HOME/.xinitrc.d/zzzzz-kde3.sh

    to make the script executable.

KDE4

  1. Edit e.g. $HOME/.xinitrc.d/zzzzzz-kde4.sh .
  2. Put the following in it (assuming a default Fink setup):
    #!/bin/sh
    . /sw/bin/init.sh
    exec /sw/opt/kde4/x11/bin/startkde

    then save the file.

  3. Run
    chmod a+x $HOME/.xinitrc.d/zzzzzz-kde4.sh

    to make the script executable.

Advertisements

User Customization of X11 on 10.5 and 10.6

The use of a $HOME/.xinitrc file to customize X11 has been deprecated as of OS 10.5.  Unfortunately, due to time constraints, we haven’t set down in the documentation what users should be doing.  I hope to set some ideas down here to clarify the situation.

The old way:

The presence of a $HOME/.xinitrc file replaces the system’s default X11 startup sequence.  A couple of consequences are:

  1. The user must make sure to run a window manager (unless one isn’t desired), e.g. just having
    xterm
    will generate an xterm with no window decorations, and any further X11 applications started from that xterm will be unmanaged. In this case the user probably wanted something like
    xterm &
    quartz-wm
  2. The user must make sure that $HOME/.xinitrc ends with a non-backgrounding command, or X11 will quit immediately. This would be the case in the prior example above if the user had
    xterm &
    quartz-wm &

The new way:

Instead of a single $HOME/.xinitrc file, under the current incarnation of Apple’s X11 (and any Xorg 7, really), one can do the following:

  1. Create the directory $HOME/.xinitrc.d
  2. For anything you want to run, create an executable shell script in that directory.  For example, to run Fink’s xpad application on startup, create a $HOME/.xinitrc.d/xpad.sh (the name is somewhat arbitrary, but see below) with contents
    #!/bin/sh
    /sw/bin/xpad
  3. and make it executable via

    chmod a+x $HOME/.xinitrc.d/xpad.sh

    Note that in this case you don’t have to set a window manager.

    The window manager can be changed in the same way.  There is only one subtlety:  the contents of  $HOME/.xinitrc.d are run in the order that the filenames appear in a listing, and generally one will want the window manager to be run last, so its script should be named appropriately. For example, you could have 0-xpad.sh and 99-evilwm.sh scripts to run the evilwm window manager and start xpad automatically.

  4. It’s easy to keep a list of scripts that start one item, and to set whether they get run or not by using
    chmod a+x <name of script>.sh

    or

    chmod a-x <name of script>.sh

    respectively.

Note: It’s slightly more complicated to set things up for GNOME or KDE, and I will discuss that issue in a subsequent entry.

Statistics for November 2009

Welcome to a new instalment of the statistics posts.

As usual, these statistics refer to package description files. A package description is a .info file that describes the information that Fink needs in order to manage packages. Sometimes a package is split into multiple .info files (e.g. package-10.5.info and package-10.6.info). It is also possible that a single .info file defines multiple packages: split-offs, different Perl/Python/… versions, -mac/-x11, etc. I’ve also counted a .info file that is in both stable and unstable as a single file.

The (monthly) evolution of the number of package descriptions is shown inside parentheses/in italics.

Currently Fink has 5,318 (-67) .info files split into the following sections:

Section # of Pkgs
libs/perlmods 685 (+4)
libs 472 (+4)
sci 439 (+6)
gnome 364 (+4)
utils 347 (+5)
crypto 327 (+0)
net 325 (+2)
devel 271 (+5)
graphics 245 (+6)
kde 244 (-112)
text 237 (+1)
games 200 (+1)
kde/po 187 (+1)
languages 164 (+1)
sound 159 (+2)
x11 137 (+0)
editors 128 (+0)
libs/pythonmods 81 (+0)
web 75 (+0)
x11-wm 61 (+0)
database 57 (+2)
libs/rubymods 48 (+0)
base 43 (+1)
shells 18 (+0)
x11-system 4 (+0)

The top 10 maintainers are

Maintainer # of Pkgs
Benjamin Reed 716 (-126)
Jack Fink 716 (+48)
Daniel Macks 283 (+0)
The Gnome Core Team 209 (-5)
Daniel Johnson 180 (+6)
Todai Fink Team 153 (+0)
Christian Schaffner 122 (+0)
Ben Hines 103 (+0)
Dave Morrison 99 (+0)
Kurt Schwehr 91 (+1)

These 10 top maintainers are responsible for 2,672 (50%) package descriptions. Out of 286 (+0) maintainers, 122 (+0) (43%) of them maintain only one package description, and 210 (-1) (73%) of them maintain five or less package descriptions.

There are 586 (-5) (11%) unmaintained package descriptions.

FinkCommander 0.5.5 has been released

FinkCommander 0.5.5 has been released! FinkCommander is a graphical user interface for Fink and it’s been around for a few years. This new version is a universal application (32- and 64-bit Intel, 32- and 64-bit PowerPC), it’s been translated to Japanese, and the feedback e-mail actually says whether the feedback is positive or negative! It’s also got a new icon designed by yours truly.

FinkCommander 0.5.5 About Window

There’s still a lot of work to do. If you’re an Objective C/Cocoa developer or a graphic designer, willing to contribute to FinkCommander, drop me a note.

Finding files in Fink

Let’s see some methods to find files and their packages in Fink.

Using find

find is a command that is provided by most, if not all, Unix-based systems, including Mac OS X. Let’s say you want to find a file named zipfile.py in your Fink installation. On my system,

$ find /sw -name zipfile.py
/sw/lib/python2.5/zipfile.py
/sw/lib/python2.6/zipfile.py

You can be more specific if you’re sure that a file resides in a certain directory, e.g.

$ find /sw/lib -name libgutils\*dylib
/sw/lib/fontforge/libgutils.1.0.3.dylib
/sw/lib/fontforge/libgutils.1.dylib
/sw/lib/fontforge/libgutils.dylib

In the command above I also used \* to indicate that I was interested in any file whose name starts with libgutils and ends with dylib.

Furthermore, depending on your configuration, you may use locate or mdfind for this purpose.

Using dpkg

Fink uses a fork of Debian’s dpkg tool for binary package management. Here are some useful dpkg commands.

If you want to find out which package installed a given file, use dpkg -S. For example,

$ dpkg -S zipfile.py
python26: /sw/lib/python2.6/zipfile.pyc
python26: /sw/lib/python2.6/zipfile.pyo
python26: /sw/lib/python2.6/test/test_zipfile.pyc
python26: /sw/lib/python2.6/test/test_zipfile.pyo
python25: /sw/lib/python2.5/zipfile.py
python25: /sw/lib/python2.5/zipfile.pyc
python25: /sw/lib/python2.5/zipfile.pyo
python25: /sw/lib/python2.5/test/test_zipfile.pyc
python25: /sw/lib/python2.5/test/test_zipfile.pyo
python26: /sw/lib/python2.6/test/test_zipfile.py
python25: /sw/lib/python2.5/test/test_zipfile.py
python26: /sw/lib/python2.6/zipfile.py

Specifying an absolute path will limit the results:

$ dpkg -S /sw/lib/python2.6/zipfile.py
python26: /sw/lib/python2.6/zipfile.py

If you want to list the files installed by a given package (e.g. the di package), use dpkg -L:

$ dpkg -L di
/.
/sw
/sw/bin
/sw/bin/di
/sw/bin/mi
/sw/share
/sw/share/doc
/sw/share/doc/di
/sw/share/doc/di/MANIFEST
/sw/share/doc/di/README
/sw/share/man
/sw/share/man/man1
/sw/share/man/man1/di.1

The grep command can be useful to filter the results: to list only the binaries (programs) installed under /sw/bin,

$ dpkg -L di | grep ^/sw/bin
/sw/bin
/sw/bin/di
/sw/bin/mi

If you have a binary package (i.e., a .deb file that was either built on your machine or obtained via a binary distribution), you need to use dpkg -c instead:

$ dpkg -c /sw/fink/debs/bibclean_2.11.4-2_darwin-i386.deb
drwxr-xr-x root/admin        0 2009-09-16 09:04 ./
drwxr-xr-x root/admin        0 2009-09-16 09:04 ./sw/
drwxr-xr-x root/admin        0 2009-09-16 09:04 ./sw/bin/
-rwxr-xr-x root/admin   112564 2009-09-16 09:04 ./sw/bin/bibclean
drwxr-xr-x root/admin        0 2009-09-16 09:04 ./sw/share/
drwxr-xr-x root/admin        0 2009-09-16 09:04 ./sw/share/doc/
drwxr-xr-x root/admin        0 2009-09-16 09:04 ./sw/share/doc/bibclean/
-rw-r--r-- root/admin    26550 2009-09-16 09:04 ./sw/share/doc/bibclean/README
-rw-r--r-- root/admin     2932 2009-09-16 09:04 ./sw/share/doc/bibclean/bibclean.copyright
-rw-r--r-- root/admin    48768 2009-09-16 09:04 ./sw/share/doc/bibclean/bibclean.pdf
-rw-r--r-- root/admin    76512 2009-09-16 09:04 ./sw/share/doc/bibclean/bibclean.ps
-rw-r--r-- root/admin    55226 2009-09-16 09:04 ./sw/share/doc/bibclean/bibclean.txt
drwxr-xr-x root/admin        0 2009-09-16 09:04 ./sw/share/man/
drwxr-xr-x root/admin        0 2009-09-16 09:04 ./sw/share/man/man1/
-rw-r--r-- root/admin    42974 2009-09-16 09:04 ./sw/share/man/man1/bibclean.1

The directory/folder /sw/fink/debs contains convenient symbolic links to the actual .deb files created when packages were built on your machine. On the other hand, .deb files obtained via binary distributions are located under /sw/var/cache/apt/archives.

Statistics for October 2009

Welcome to a new instalment of the statistics posts.

As usual, these statistics refer to package description files. A package description is a .info file that describes the information that Fink needs in order to manage packages. Sometimes a package is split into multiple .info files (e.g. package-10.5.info and package-10.6.info). It is also possible that a single .info file defines multiple packages: split-offs, different Perl/Python/… versions, -mac/-x11, etc. I’ve also counted a .info file that is in both stable and unstable as a single file.

The (monthly) evolution of the number of package descriptions is shown inside parentheses/in italics.

Currently Fink has 5,385 (+56) .info files split into the following sections:

Section # of Pkgs
libs/perlmods 681 (+8)
libs 468 (+6)
sci 433 (+7)
gnome 360 (+0)
kde 356 (+7)
utils 342 (+2)
crypto 327 (+1)
net 323 (+4)
devel 266 (+7)
graphics 239 (+2)
text 236 (+2)
games 199 (+2)
kde/po 186 (+0)
languages 163 (+4)
sound 157 (+0)
x11 137 (+0)
editors 128 (+0)
libs/pythonmods 81 (+0)
web 75 (+3)
x11-wm 61 (+0)
database 55 (+0)
libs/rubymods 48 (+0)
base 42 (+0)
shells 18 (+1)
x11-system 4 (+0)

The top 10 maintainers are

Maintainer # of Pkgs
Benjamin Reed 842 (+1)
Jack Fink 668 (+23)
Daniel Macks 283 (+3)
The Gnome Core Team 214 (+0)
Daniel Johnson 174 (+11)
Todai Fink Team 153 (+2)
Christian Schaffner 122 (+0)
Ben Hines 103 (+0)
Dave Morrison 99 (+0)
Kurt Schwehr 90 (+1)

These 10 top maintainers are responsible for 2,748 (51%) package descriptions. Out of 286 (-2) maintainers, 122 (-2) (42%) of them maintain only one package description, and 211 (-1) (74%) of them maintain five or less package descriptions.

There are 591 (+10) (11%) unmaintained package descriptions.

Fink Web site is down

2009-10-30 06:00 (GMT) update: The following rsync mirrors are reported to be working and up-to-date:

rsync://distfiles.master.finkmirrors.net/finkinfo/
rsync://sjc.ca.us.finkmirrors.net/finkinfo/
rsync://ber.de.eu.finkmirrors.net/finkinfo/
rsync://ams.nl.eu.finkmirrors.net/finkinfo/
rsync://hnd.jp.asi.finkmirrors.net/finkinfo/

2009-10-29 10:40 (GMT) update: Martin Costabel has detected that some of the rsync mirrors are still stalled. The following ones are reported to be working and up-to-date:

rsync://ber.de.eu.finkmirrors.net/finkinfo/
rsync://ams.nl.eu.finkmirrors.net/finkinfo/
rsync://hnd.jp.asi.finkmirrors.net/finkinfo/

If you use rsync to selfupdate, edit /sw/etc/fink.conf so that the rsync mirror you use (the line that starts with Mirror-rsync) is one of the above mirrors.

Also, http://www.finkproject.org should be working and up-to-date. Please report any issues to the fink-users mailing list.

2009-10-28 00:20 (GMT) update: finkmirrors.net is fixed and already working for some users (it might take some time for the changes to propagate to your DNS servers). This means that rsync selfupdate, source files, and bindists should be working. You might want to revert the changes that were made to /sw/etc/fink.conf and /sw/etc/apt/sources.list and run fink scanpackages.

As some of you might have noticed, our Fink Web site is down due to server issues. This also means that the rsync mirrors aren’t updating and the master mirror is unreachable. Whilst we sort this out, follow the (updated) instructions below. Don’t forget to make a backup copy of the original files.

We apologise for the inconvenience. Further news will be available on this blog and the mailing lists.