971 lines
20 KiB
HTML
971 lines
20 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||
<HTML
|
||
><HEAD
|
||
><TITLE
|
||
>Using multi-headed framebuffers</TITLE
|
||
><META
|
||
NAME="GENERATOR"
|
||
CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
|
||
REL="HOME"
|
||
TITLE="Framebuffer HOWTO"
|
||
HREF="index.html"><LINK
|
||
REL="PREVIOUS"
|
||
TITLE="Using framebuffer devices on ARM platforms"
|
||
HREF="x998.html"><LINK
|
||
REL="NEXT"
|
||
TITLE="Using / Changing Fonts"
|
||
HREF="x1223.html"></HEAD
|
||
><BODY
|
||
CLASS="section"
|
||
BGCOLOR="#FFFFFF"
|
||
TEXT="#000000"
|
||
LINK="#0000FF"
|
||
VLINK="#840084"
|
||
ALINK="#0000FF"
|
||
><DIV
|
||
CLASS="NAVHEADER"
|
||
><TABLE
|
||
SUMMARY="Header navigation table"
|
||
WIDTH="100%"
|
||
BORDER="0"
|
||
CELLPADDING="0"
|
||
CELLSPACING="0"
|
||
><TR
|
||
><TH
|
||
COLSPAN="3"
|
||
ALIGN="center"
|
||
>Framebuffer HOWTO</TH
|
||
></TR
|
||
><TR
|
||
><TD
|
||
WIDTH="10%"
|
||
ALIGN="left"
|
||
VALIGN="bottom"
|
||
><A
|
||
HREF="x998.html"
|
||
ACCESSKEY="P"
|
||
>Prev</A
|
||
></TD
|
||
><TD
|
||
WIDTH="80%"
|
||
ALIGN="center"
|
||
VALIGN="bottom"
|
||
></TD
|
||
><TD
|
||
WIDTH="10%"
|
||
ALIGN="right"
|
||
VALIGN="bottom"
|
||
><A
|
||
HREF="x1223.html"
|
||
ACCESSKEY="N"
|
||
>Next</A
|
||
></TD
|
||
></TR
|
||
></TABLE
|
||
><HR
|
||
ALIGN="LEFT"
|
||
WIDTH="100%"></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H1
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1010"
|
||
></A
|
||
>11. Using multi-headed framebuffers</H1
|
||
><P
|
||
>This part of the document was very kindly donated by
|
||
Frederick A. Niles, who retains all rights to the
|
||
information contained herewith in this section of the
|
||
HOWTO.</P
|
||
><DIV
|
||
CLASS="section"
|
||
><H2
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1013"
|
||
></A
|
||
>11.1. Introduction</H2
|
||
><P
|
||
>The main goal of this document is to get you
|
||
started with running a dual head configuration
|
||
of Linux. While this process is pretty
|
||
straight forward there are numerous things that
|
||
one can do wrong along the way.</P
|
||
><P
|
||
>The example I concentrate on is getting an
|
||
X-server running on a second monitor. I find
|
||
this nice as you can usually find old large 19"
|
||
to 21" fixed frequency monitors around that
|
||
people are giving away because they can't use
|
||
them. This way you can boot off a small
|
||
multisync and then use X on a nice big
|
||
monitor.</P
|
||
><P
|
||
>Please understand dual head support is currently
|
||
developing so this information changes rapidly.
|
||
Anything in this document could be out of date
|
||
or just plain incorrect by the time you are
|
||
reading this.</P
|
||
><P
|
||
>** WARNING ** This document was written before
|
||
any XFree86 4.0 release. If you are reading
|
||
this and XFree86 4.0 is already released many
|
||
things may have changed. Try getting a newer
|
||
version of this document if it's
|
||
available.</P
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H2
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1019"
|
||
></A
|
||
>11.2. Feedback</H2
|
||
><P
|
||
>Feedback is most certainly welcome for this
|
||
document. Without your submissions and input,
|
||
this document wouldn't exist. So, please post
|
||
your additions, comments and criticisms to:
|
||
<TT
|
||
CLASS="email"
|
||
><<A
|
||
HREF="mailto:Frederick.A.Niles@gsfc.nasa.gov"
|
||
>Frederick.A.Niles@gsfc.nasa.gov</A
|
||
>></TT
|
||
>.</P
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H2
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1023"
|
||
></A
|
||
>11.3. Contributors</H2
|
||
><P
|
||
>The following people have contributed to this
|
||
mini-HOWTO.</P
|
||
><P
|
||
></P
|
||
><UL
|
||
><LI
|
||
><P
|
||
>Petr
|
||
Vandrovec</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>Andreas Ehliar
|
||
(x2x)</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>Marco Bizzarri (multiple X
|
||
servers)</P
|
||
></LI
|
||
></UL
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H2
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1033"
|
||
></A
|
||
>11.4. Standard Disclaimer</H2
|
||
><P
|
||
>No liability for the contents of this document
|
||
can be accepted. Use the concepts, examples
|
||
and other content at your own risk. As this is
|
||
a new edition of this document, there may be
|
||
errors and inaccuracies that could be damaging
|
||
to your system. Proceed with caution, and
|
||
although this is highly unlikely, I don't take
|
||
any responsibility for that.</P
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H2
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1036"
|
||
></A
|
||
>11.5. Copyright Information</H2
|
||
><P
|
||
>This section of the document is copyrighted
|
||
<09> 1999 Frederick Niles and distributed
|
||
under the following terms:</P
|
||
><P
|
||
></P
|
||
><UL
|
||
><LI
|
||
><P
|
||
>Linux HOWTO documents may be
|
||
reproduced and distributed in
|
||
whole or in part, in any medium
|
||
physical or electronic, as long
|
||
as this copyright notice is
|
||
retained on all copies.
|
||
Commercial redistribution is
|
||
allowed and encouraged;
|
||
however, the author would like
|
||
to be notified of any such
|
||
distributions.</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>All translations, derivative
|
||
works, or aggregate works
|
||
incorporating any Linux HOWTO
|
||
documents must be covered under
|
||
this copyright notice. That
|
||
is, you may not produce a
|
||
derivative work from a HOWTO
|
||
and impose additional
|
||
restrictions on its
|
||
distribution. Exceptions to
|
||
these rules may be granted
|
||
under certain conditions;
|
||
please contact the Linux HOWTO
|
||
coordinator at the address
|
||
given below.</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>If you have questions, please
|
||
contact, the Linux HOWTO
|
||
coordinator, at
|
||
<TT
|
||
CLASS="email"
|
||
><<A
|
||
HREF="mailto:linux-howto@sunsite.unc.edu"
|
||
>linux-howto@sunsite.unc.edu</A
|
||
>></TT
|
||
></P
|
||
></LI
|
||
></UL
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H2
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1047"
|
||
></A
|
||
>11.6. What hardware is supported?</H2
|
||
><P
|
||
>Most video cards assume they will be the only one
|
||
in the system and are permanently set with the
|
||
addressing of the primary display adapter.
|
||
There are a few exceptions.</P
|
||
><P
|
||
></P
|
||
><UL
|
||
><LI
|
||
><P
|
||
>Matrox cards: This includes
|
||
Matrox Millennium, Matrox
|
||
Millennium II, Matrox Mystique,
|
||
Matrox Mystique 220, Matrox
|
||
Productiva G100, Matrox
|
||
Mystique G200, Matrox
|
||
Millennium G200 and Matrox
|
||
Marvel G200 video
|
||
cards</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>MDA: This includes monochrome
|
||
Hercules graphics adapters among
|
||
others. This for text only
|
||
second head
|
||
support.</P
|
||
></LI
|
||
></UL
|
||
><P
|
||
>Note: it's only the second adapter that
|
||
has to be one of the above.</P
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H2
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1056"
|
||
></A
|
||
>11.7. Commercial support</H2
|
||
><P
|
||
>This mini-HOWTO in primarily concerned with free
|
||
software. However, there are commercial X
|
||
servers with multi-head support. These include
|
||
Metro Link's (www.metrolink.com) Metro-X and Xi
|
||
Graphics' (www.xig.com) Accelerated-X.</P
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H2
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1059"
|
||
></A
|
||
>11.8. Getting all the stuff</H2
|
||
><P
|
||
>You'll need the following patches and programs:</P
|
||
><P
|
||
></P
|
||
><UL
|
||
><LI
|
||
><P
|
||
>fbset program -
|
||
try <A
|
||
HREF="http://www.cs.kuleuven.ac.be/~geert/bin/"
|
||
TARGET="_top"
|
||
>http://www.cs.kuleuven.ac.be/~geert/bin/</A
|
||
>
|
||
(note: RedHat 6.0 already has
|
||
this program
|
||
included)</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>fbaddon Matrix
|
||
dual head patches for Linux
|
||
kernel - try <A
|
||
HREF="ftp://platan.vc.cvut.cz/pub/linux/matrox-latest/"
|
||
TARGET="_top"
|
||
>ftp://platan.vc.cvut.cz/pub/linux/matrox-latest/</A
|
||
></P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>con2fb program -
|
||
try <A
|
||
HREF="ftp://platan.vc.cvut.cz/pub/linux/matrox-latest/"
|
||
TARGET="_top"
|
||
>ftp://platan.vc.cvut.cz/pub/linux/matrox-latest/</A
|
||
></P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>The X11 frame buffer server
|
||
XF86_FBDev. This
|
||
is a standard part of XFree86
|
||
3.3.1.</P
|
||
></LI
|
||
></UL
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H2
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1078"
|
||
></A
|
||
>11.9. Getting Started</H2
|
||
><P
|
||
>The first thing you'll need to do is to patch a
|
||
copy of the Linux source with the
|
||
"fbaddon" patch. Then you need to
|
||
configure the kernel and turn on frame buffer
|
||
support. If you have Matrox cards turn on
|
||
Matrox unified accelerated driver support as
|
||
well as the particular type of card you have.
|
||
Don't turn on VESA frame buffer support. It can
|
||
cause a conflict. Do turn on multi-head
|
||
support (obviously). Build the kernel and
|
||
reboot.</P
|
||
><P
|
||
>Now you need to install the "fbset"
|
||
program and carefully read all the
|
||
documentation on how to adjust the settings.
|
||
Using a "/etc/fb.modes" file is
|
||
highly recommended once you've decided on your
|
||
settings. The fbset program includes a Perl
|
||
script to convert your XF86Config file to
|
||
fb.modes settings. I've included my
|
||
octave/Borne shell script to convert your
|
||
XF86Config file in Appendix A & B.</P
|
||
><P
|
||
>You need to get comfortable with using the frame
|
||
buffer device on one monitor, understanding any
|
||
issues that can arise from your set up that
|
||
have nothing to do with multi-head support.
|
||
This can save a lot of head scratching
|
||
later.</P
|
||
><P
|
||
>I'm going to concentrate my explanation on
|
||
getting X running on the second monitor as
|
||
doing most other configurations will just be a
|
||
obvious subset of the procedure.</P
|
||
><DIV
|
||
CLASS="section"
|
||
><H3
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1087"
|
||
></A
|
||
>11.9.1. Move a console over...</H3
|
||
><P
|
||
>Compile the "con2fb" program. If you run
|
||
it without any arguments you'll get the
|
||
following usage message: "usage:
|
||
con2fb fbdev
|
||
console".</P
|
||
><P
|
||
>Thus, an example command would be
|
||
"con2fb /dev/fb1
|
||
/dev/tty6" to move
|
||
virtual console number six over to the
|
||
second monitor. Use Ctrl-Alt-F6 to
|
||
move over to that console and see that
|
||
it does indeed show up on the second
|
||
monitor.</P
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H3
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1093"
|
||
></A
|
||
>11.9.2. Use "" to adjust the
|
||
settings on this second display</H3
|
||
><P
|
||
>Only set the "fbset"
|
||
settings on the monitor you run the
|
||
"fbset" command on.
|
||
Therefore, you must be careful to use
|
||
the "-fb" flag on the
|
||
second monitor. In particular, if you
|
||
do nothing else you'll probably want to
|
||
at least set the virtual vertical
|
||
resolution to your actually vertical
|
||
resolution.</P
|
||
><P
|
||
>e.g. "fbset -fb /dev/fb1 -vyres
|
||
600"</P
|
||
><P
|
||
>This will seriously slow down text mode,
|
||
but X will be obnoxious without
|
||
it.</P
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H3
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1103"
|
||
></A
|
||
>11.9.3. Set up X for framebuffer support.</H3
|
||
><P
|
||
>The framebuffer.txt file explains this
|
||
better than I can, but here's the two
|
||
important points.</P
|
||
><P
|
||
>Make sure you set the link for "X" to
|
||
point to "XF86_FBDev".</P
|
||
><P
|
||
>Next you need to add a monitor section to
|
||
your XF86Config file for the frame
|
||
buffer device. Here's an example:</P
|
||
><P
|
||
><P
|
||
CLASS="literallayout"
|
||
> # The Frame Buffer server
|
||
|
||
Section "Screen"
|
||
Driver "fbdev"
|
||
Device "Millennium"
|
||
Monitor "NEC MultiSync 5FGp"
|
||
Subsection "Display"
|
||
Depth 8
|
||
Modes "default"
|
||
ViewPort 0 0
|
||
EndSubsection Subsection "Display"
|
||
Depth 16
|
||
Modes "default"
|
||
ViewPort 0 0
|
||
EndSubsection
|
||
Subsection "Display"
|
||
Depth 24
|
||
Modes "default"
|
||
ViewPort 0 0
|
||
EndSubsection
|
||
Subsection "Display"
|
||
Depth 32
|
||
Modes "default"
|
||
ViewPort 0 0
|
||
EndSubsection
|
||
EndSection
|
||
</P
|
||
></P
|
||
><P
|
||
>Use the "default" modes as I don't think
|
||
any other ones will work with the Matrox
|
||
frame buffer.</P
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H3
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1113"
|
||
></A
|
||
>11.9.4. Try starting the X server on the second
|
||
display</H3
|
||
><P
|
||
>Set the environment variable
|
||
FRAMEBUFFER to the second
|
||
frame buffer.</P
|
||
><P
|
||
>"export
|
||
FRAMEBUFFER=/dev/fb1" or
|
||
"setenv FRAMEBUFFER
|
||
/dev/fb1"</P
|
||
><P
|
||
>You need to start the X server so that it
|
||
both matches the selected color depth
|
||
and it appears on the same monitor you
|
||
start the X server from.</P
|
||
><P
|
||
>e.g. "startx -- :0 -bpp 16
|
||
vt06"</P
|
||
><P
|
||
>This example will start the "zeroth" X
|
||
server on virtual console six with 16
|
||
bit color. Using ":1" when launching
|
||
another X server for the other frame
|
||
buffer will allow you to have two X
|
||
servers running.</P
|
||
></DIV
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H2
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1124"
|
||
></A
|
||
>11.10. Summary</H2
|
||
><P
|
||
>The steps involved in getting a X server running
|
||
on a second display can be summrized as
|
||
follows:</P
|
||
><P
|
||
></P
|
||
><UL
|
||
><LI
|
||
><P
|
||
>Get the kernel patch,
|
||
fbset and
|
||
con2fb</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>Patch the kerenl, configure,
|
||
rebuild and
|
||
reboot</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>Add XF86_FBDev
|
||
section to XF86Config file and
|
||
set X symbolic
|
||
link</P
|
||
></LI
|
||
></UL
|
||
><P
|
||
>Then each time you reboot:</P
|
||
><P
|
||
></P
|
||
><UL
|
||
><LI
|
||
><P
|
||
>Move a console over e.g.
|
||
"con2fb /dev/fb1
|
||
/dev/tty6"</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>Adjust the settings e.g.
|
||
"fbset -fb /dev/fb1
|
||
1280x1024"</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>Set the FRAMEBUFFER e.g. "export FRAMEBUFFER=/dev/fb1"</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>Start the X server e.g. "startx -- -bpp 16 vt06"</P
|
||
></LI
|
||
></UL
|
||
><P
|
||
>You can automate this each time you reboot via a
|
||
shell alias. It must be an alias and not a
|
||
shell script since it needs to detect the
|
||
current console number. This is my csh alias
|
||
to start up X on a second fixed frequency
|
||
monitor:</P
|
||
><P
|
||
><P
|
||
CLASS="literallayout"
|
||
> alias startxfb = "
|
||
setenv FRAMEBUFFER /dev/fb\!*; # Set the env var to the cmd arg.
|
||
con2fb $FRAMEBUFFER /dev/$tty; # Move the fb to the current tty.
|
||
fbset -fb $FRAMEBUFFER 1280x1024@62; # Favorite from /etc/fb.modes
|
||
startx -- :\!* -bpp 16 vt0`echo $tty | cut -dy f 2`' # X on this tty.
|
||
"
|
||
</P
|
||
></P
|
||
><P
|
||
>In my .cshrc file these are all on the same line
|
||
together without the comments, but it's easier
|
||
to read here with line breaks and comments
|
||
inserted. I just give the number of the frame
|
||
buffer as an argument and it starts right
|
||
up.</P
|
||
><P
|
||
>I'm not sure how to do this same alias in bash.
|
||
I don't know how to determine the current tty
|
||
or get the arguments to an alias in bash. If
|
||
someone lets me know I'll insert it here.
|
||
However, you can use the "tty" command to get
|
||
the name of the current VT and just make two
|
||
separate aliases for each X server.</P
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H2
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1157"
|
||
></A
|
||
>11.11. Other Notes and Problems</H2
|
||
><P
|
||
></P
|
||
><UL
|
||
><LI
|
||
><P
|
||
>Both "fbset" and
|
||
"startx" commands
|
||
MUST be run from the same frame
|
||
buffer as the one being
|
||
affected. This places serious
|
||
limits on how much of these
|
||
commands can be automated via
|
||
scripts.</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>XFree86 4.0 will have "proper"
|
||
multi-head support, but 3.3.1
|
||
does not. You can run two
|
||
servers with 3.3.1 and use
|
||
"x2x" to switch
|
||
between them
|
||
however...(see the next
|
||
bullet)</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>The inactive frame buffer will
|
||
just hold the last image of
|
||
when it was active, no updates
|
||
with occur.</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>The monitor that's not selected
|
||
doesn't always preseve it's
|
||
state when not active. (But it
|
||
usually does)</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>Geert Uytterhoeven (the frame
|
||
buffer maintainer) and Linus
|
||
Torvalds don't agree with the
|
||
current "frame buffer per VT"
|
||
multi-head console support
|
||
changes (i.e.
|
||
"fbaddon") so it
|
||
may never be in the mainstream
|
||
kernel tree. (This was heard
|
||
third hand and may be wildly
|
||
untrue.)</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>If you "break the rules" and
|
||
start the X server (run
|
||
"startx") from a
|
||
different monitor, the machine
|
||
can eventually crash badly with
|
||
the keyboard and mouse input
|
||
all mixed
|
||
together.</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>The documentation
|
||
framebuffer.txt in the kernel
|
||
source explains that you can
|
||
use the Modeline settings in
|
||
your XF86Config file directly
|
||
when running X. Using the
|
||
Matrox frame buffer seems to
|
||
force the X server to drop all
|
||
of those. So you can only have
|
||
the one
|
||
("default")
|
||
setting at at time (the same
|
||
one you had in text
|
||
mode).</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>The XF86_FBDev driver is
|
||
unaccelerated. However, there
|
||
are patches for accelerated
|
||
Matrox support at <A
|
||
HREF="http://www.in-berlin.de/User/kraxel/xfree86/"
|
||
TARGET="_top"
|
||
>http://www.in-berlin.de/User/kraxel/xfree86/</A
|
||
></P
|
||
></LI
|
||
></UL
|
||
><DIV
|
||
CLASS="section"
|
||
><H3
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1183"
|
||
></A
|
||
>11.11.1. Getting ""
|
||
(i.e. /
|
||
) to work</H3
|
||
><P
|
||
>I have not yet figured out a way to boot
|
||
with init level 5 with a dual monitor
|
||
configuration (and actually have the
|
||
server on either the second montior or
|
||
both). While it seems easy enough to
|
||
add a line to the gdm/xdm Xservers
|
||
file, the constraint that you must start
|
||
the X server from the same frame buffer
|
||
prevents the obvious solution from
|
||
working. If anyone finds a way please
|
||
e-mail me and I'll add it here.</P
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H3
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1189"
|
||
></A
|
||
>11.11.2. Using the "" program</H3
|
||
><P
|
||
>There's a nice little program called
|
||
x2x that will switch X
|
||
servers for you when you get to the
|
||
edge of the screen. Last known home
|
||
for this program was: <A
|
||
HREF="http://ftp.digital.com/pub/DEC/SRC/x2x/"
|
||
TARGET="_top"
|
||
>http://ftp.digital.com/pub/DEC/SRC/x2x/</A
|
||
>
|
||
It's also an optional Debian package.
|
||
I haven't tried it yet but some users
|
||
have reported success.</P
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H3
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1195"
|
||
></A
|
||
>11.11.3. Other useful commands</H3
|
||
><P
|
||
>These are existing linux commands that
|
||
are worth remembering when dealing with
|
||
a multi-head configuration (especially
|
||
in writing scripts).</P
|
||
><P
|
||
></P
|
||
><UL
|
||
><LI
|
||
><P
|
||
>"chvt"
|
||
will allow you to
|
||
switch between virtual
|
||
terminals.</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>"openvt"
|
||
start a program on a
|
||
new virtual terminal
|
||
(VT).</P
|
||
></LI
|
||
><LI
|
||
><P
|
||
>"tty" will
|
||
report the name of the
|
||
current
|
||
terminal.</P
|
||
></LI
|
||
></UL
|
||
></DIV
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H2
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1208"
|
||
></A
|
||
>11.12. Appendix A. Octave "" script</H2
|
||
><P
|
||
>(note the bpp settings)</P
|
||
><P
|
||
><P
|
||
CLASS="literallayout"
|
||
> #!/usr/bin/octave -q
|
||
bpp = 16;
|
||
DCF = sscanf(argv(1,:), "%f");
|
||
HR = sscanf(argv(2,:), "%f");
|
||
SH1 = sscanf(argv(3,:), "%f");
|
||
SH2 = sscanf(argv(4,:), "%f");
|
||
HFL = sscanf(argv(5,:), "%f");
|
||
VR = sscanf(argv(6,:), "%f");
|
||
SV1 = sscanf(argv(7,:), "%f");
|
||
SV2 = sscanf(argv(8,:), "%f");
|
||
VFL = sscanf(argv(9,:), "%f");
|
||
pixclock = 1000000 / DCF;
|
||
left_margin = HFL - SH2;
|
||
right_margin = SH1 - HR;
|
||
hsync_len = SH2 - SH1;
|
||
|
||
# 3) vertical timings:
|
||
upper_margin = VFL - SV2;
|
||
lower_margin = SV1 - VR;
|
||
vsync_len = SV2 - SV1;
|
||
|
||
RR = DCF / (HFL * VFL) *1e6;
|
||
HSF = DCF / HFL * 1e3;
|
||
printf("mode \"%dx%d\"\n",HR,VR);
|
||
printf(" # D: %3.2f MHz, H: %3.2f kHz, V: %2.2f Hz\n", DCF, HSF, RR);
|
||
printf(" geometry %d %d %d %d %d\n", HR, VR, HR, VR, bpp);
|
||
printf(" timings %d %d %d %d %d %d %d\n", ...
|
||
pixclock, left_margin, right_margin, ...
|
||
upper_margin, lower_margin, ...
|
||
hsync_len, vsync_len);
|
||
printf("endmode\n");
|
||
</P
|
||
></P
|
||
></DIV
|
||
><DIV
|
||
CLASS="section"
|
||
><H2
|
||
CLASS="section"
|
||
><A
|
||
NAME="AEN1215"
|
||
></A
|
||
>11.13. Appendix B. Bourne Shell ""
|
||
script</H2
|
||
><P
|
||
>(This calls the octave script
|
||
"cvtmode")</P
|
||
><P
|
||
><P
|
||
CLASS="literallayout"
|
||
> #!/bin/sh
|
||
|
||
# Shell script to convert XF86Config file to fb.modes file.
|
||
# Uses octave script cvtmode.m
|
||
|
||
if [ -z $1 ]; then
|
||
FILE=/etc/X11/XF86Config
|
||
else
|
||
FILE=$1
|
||
fi
|
||
|
||
i=1
|
||
LEN=`grep Modeline $FILE | wc -l`
|
||
while expr $i \< $LEN > /dev/null ;
|
||
do
|
||
CURLINE=`grep Modeline $FILE | cut -d'"' -f 3-20 | head -$i | tail -1 `
|
||
./cvtmode.m $CURLINE
|
||
echo " "
|
||
i=`expr $i + 1`
|
||
done
|
||
</P
|
||
></P
|
||
></DIV
|
||
></DIV
|
||
><DIV
|
||
CLASS="NAVFOOTER"
|
||
><HR
|
||
ALIGN="LEFT"
|
||
WIDTH="100%"><TABLE
|
||
SUMMARY="Footer navigation table"
|
||
WIDTH="100%"
|
||
BORDER="0"
|
||
CELLPADDING="0"
|
||
CELLSPACING="0"
|
||
><TR
|
||
><TD
|
||
WIDTH="33%"
|
||
ALIGN="left"
|
||
VALIGN="top"
|
||
><A
|
||
HREF="x998.html"
|
||
ACCESSKEY="P"
|
||
>Prev</A
|
||
></TD
|
||
><TD
|
||
WIDTH="34%"
|
||
ALIGN="center"
|
||
VALIGN="top"
|
||
><A
|
||
HREF="index.html"
|
||
ACCESSKEY="H"
|
||
>Home</A
|
||
></TD
|
||
><TD
|
||
WIDTH="33%"
|
||
ALIGN="right"
|
||
VALIGN="top"
|
||
><A
|
||
HREF="x1223.html"
|
||
ACCESSKEY="N"
|
||
>Next</A
|
||
></TD
|
||
></TR
|
||
><TR
|
||
><TD
|
||
WIDTH="33%"
|
||
ALIGN="left"
|
||
VALIGN="top"
|
||
>Using framebuffer devices on ARM platforms</TD
|
||
><TD
|
||
WIDTH="34%"
|
||
ALIGN="center"
|
||
VALIGN="top"
|
||
> </TD
|
||
><TD
|
||
WIDTH="33%"
|
||
ALIGN="right"
|
||
VALIGN="top"
|
||
>Using / Changing Fonts</TD
|
||
></TR
|
||
></TABLE
|
||
></DIV
|
||
></BODY
|
||
></HTML
|
||
> |