There are several reasons why the standard X mouse cursors are hard to
track for some people:
- when running X on a notebook with low contrast LCD
- on normal screens when using high resolution, 1600x1280 e. g.
- for visually impaired persons even on normal hardware
In all cases it might help to use enlarged mouse cursors. Ideally this
job should be done by a single X program that automatically enlarges
every mouse cursor.
To my knowledge there is no simple way to write a utility like this,
because the X protocol has no provision to query mouse cursors. For
more details see section [ below.
If we aim for a less general goal, though, something can be done:
There is a set of standard mouse cursors that can be found in the
cursor font (try ]xfd -fn cursor to look at it). Most programs use
these mouse cursors and the key idea is to replace the standard cursor
font with an enlarged version.
About this document
The motivation for this MINIHOWTO was a visually impaired co-student
who asked me how to enlarge the mouse cursor under X. After I found
out how this can be done, I wrote an initial version of this
document. The knowledge about the method described here does not seem
to be common, so I decided to share it and submitted this document as
a Linux MINIHOWTO, despite the fact that it is
.
The of
this document is maintained in the SGML/linuxdoc format. This makes it
possible to automatically provide versions in the following formats
(which can be found in the same place as the master): html, text,
LaTeX, DVI, PostScript, GNU info.
has
done a Japanese translation of this MINIHOWTO. It can be found in .
How to do it
Follow the steps detailed below. If you don't want to get and compile
the bdfresize package yourself, you can skip to step 3 and download a
magnified font instead of creating it.
- get cursor.bdf, the source of the cursor font, from some X
distribution, e. g. from
(if you don't
find it there try an archie search or get it from ).
- get, compile and install the bdfresize package from
(or from ):
zcat bdfresize-1.4.tar.Z | tar xf -
cd bdfresize-1.4
xmkmf
make
On Linux you probably have to use:
make CCOPTIONS='-include /usr/include/bsd/bsd.h' clean all
- create a directory and install a magnified cursor font in it
(magnification factor 2 in this example):
mkdir $HOME/fonts
bdfresize -f 2 cursor.bdf | bdftopcf >$HOME/fonts/cursor2.pcf
mkfontdir $HOME/fonts
I have prepared some
with the following magnification factors: 1.5, 2, 2.5, 3, 4, 5,
6, 7, 8 and 16. You can download one of them an copy it to
$HOME/fonts if you don't want to use bdfresize.
- modify your
.xinitrc or .xsession file: before
any X client (that uses cursors) is started the following
commands must be executed:
xset +fp $HOME/fonts
xsetroot -cursor_name X_cursor
- leave your X session and restart.
That's it—now all mouse cursors should have doubled in size.
Notes and limitations
- X servers may have a limit for the maximum cursor
size, especially if they use a hardware implementation for the mouse
cursor. Others do not have such a limit. E. g. XF86_S3 3.3
works even with a 512x512 mouse cursor (rather slowly).
- The magnified cursor font must have the same name as the original
font (the
cursor, bdfresize does not change
the font name.
- The directory with the new cursor font must be placed before the
directory with the standard cursor font in the the font path—this
is accomplished with
xset +fp (as opposed to
xset fp+ ).
- Changes in
$HOME/fonts/ will be visible only
after the command mkfontdir $HOME/fonts; xset fp rehash
and only in newly
started X clients (more exactly: for newly created cursors).
-
xset +fp path may not work on a X-Terminal. In this case
a font server (see the section [)
can be used if supported by the X-Terminal or some
other method to install the font on the X-Terminal (this can
generally only be done by your system administrator).
]- The same approach can be used for
olcursor and
decw$cursor fonts and any other cursor font you may
encounter.
- Cursor fonts produced by bdfresize don't look smooth,
especially at larger magnification factors. It would be nice if
someone could create better looking handcrafted version at
some common sizes.
Technical discussion
Is it possible to write a X program that enlarges cursors
automatically?
XCreate*Cursor Xlib
functions. XCreate*Cursor requests should be modified to use
an enlarged cursor.
This proxy server simulates a new display, e. g.
Other ideas how to make the mouse cursor more visible
Here are some ideas for rather simple X programs that might make
mouse cursors easier to track.
- When a hot key is pressed display something (big cursor, small
window, shaped window) at pointer position for 0.5s.
- use XRecolorCursor to change the mouse cursor color every 0.1s
A more demanding project would be for details).
Related info
How to use a font server
A font server is a net service that provides a set of X11 fonts
with a simple protocol. It can be queried which fonts it provides and
will supply the font bitmap data on request.
You might want to use a font server to provide the X server with a
modified cursor font, instead of telling it where to find the font on
the file system.
This method is especially handy if you use several machines that don't
share a common file system or if you use X terminals that support
the font server protocol.
A font server program and associated tools comes with the X11R5+
distribution (AFAIK).
Setting up a font server
Read the manual pages fs(1) , fslsfonts(1) (or
xfs(1) , xfslsfonts(1) under X11R6) and try it—it isn't
hard. Say, you are running the server on host some.host.edu
on port 7100. You can test the setup with the command
fslsfonts -server some.host.edu:7100
To actually use the server issue the command
xset +fp tcp/some.host.edu:7100
which should return without an error message.
How to get the bdf source for some font
If you have set up a font server simply use fstobdf which
comes with the font server.
Alternatively you may try getbdf which can dump any installed
X11 font to a bdf file.