<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
<title>Dakkar's fvwm-crystal settings</title>
<style type="text/css">
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
padding: 0 0.5em 0 0 ! important }
.first {
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title {
color: red ;
font-weight: bold ;
font-family: sans-serif }
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin-left: 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left {
clear: left }
img.align-right {
clear: right }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font-family: serif ;
font-size: 100% }
pre.literal-block, pre.doctest-block {
margin-left: 2em ;
margin-right: 2em ;
background-color: #eeeeee }
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
tt.docutils {
background-color: #eeeeee }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="dakkar-s-fvwm-crystal-settings">
<h1 class="title">Dakkar's <tt class="docutils literal"><span class="pre">fvwm-crystal</span></tt> settings</h1>
<p>I use a 2800x1050 desktop (two 20" LCD panels on a GeForce 6600), with
a <a class="reference" href="recipes/TopLine">slightly modified version</a> of the <cite>TopLine</cite> recipe. I also use a 5x5
pages virtual desktop, and a Dvorak keyboard with valume keys (mapped
to the proper keycodes in X11). My music player is <cite>AmaroK</cite>, and my
desktop manager is <cite>ROX</cite>.</p>
<p>Since my monitors can "pivot", I have further modified the recipe to
handle rotating the displays. This needs help from the video card. See
the section <a class="reference" href="#rotating-the-displays">Rotating the displays</a>.</p>
<div class="section">
<h1><a id="the-recipe" name="the-recipe">The recipe</a></h1>
<p>The main differences from the stock <cite>TopLine</cite> are:</p>
<ul class="simple">
<li>different desktop bindings</li>
<li>larger thumbnails</li>
<li>different behaviour of the edges</li>
<li>2 identical pagers (one per physical screen)</li>
<li>geometries rewritten to use <tt class="docutils literal"><span class="pre">@g</span></tt> to work with <cite>Xinerama</cite></li>
<li>each pager (and my "biff" terminal) is raised above all other
windows if I keep the mouse pointer on it long enough</li>
<li>some functions added to handle <a class="reference" href="#rotating-the-displays">rotating the displays</a></li>
</ul>
</div>
<div class="section">
<h1><a id="the-decoration" name="the-decoration">The decoration</a></h1>
<p>I have changed the <cite>Clearlooks DeepSky</cite> <a class="reference" href="decorations/Dakkar/">decoration</a> to add a mini-icon
as button 3.</p>
</div>
<div class="section">
<h1><a id="the-colorsets" name="the-colorsets">The colorsets</a></h1>
<p>Since I use tha <cite>Gentoo</cite> version of <tt class="docutils literal"><span class="pre">fvwm2</span></tt>, it has a patch that
allow fake transparency in the menus. Thus, I changed the
<cite>DarkDesktop</cite> and <cite>WhiteDesktop</cite> <a class="reference" href="colorsets/">colorsets</a> to use this feature.</p>
</div>
<div class="section">
<h1><a id="the-bindings" name="the-bindings">The bindings</a></h1>
<p>I redefined most keyboard bindings to my taste. Of particular interest
may be the <a class="reference" href="components/bindings/Music">Music</a> file, where I bind the volume controls to the volume
keycodes, and the <tt class="docutils literal"><span class="pre">Music-GUI</span></tt> function to the "eject" keycode. I
also bound most window manipulation functions to various combination
of <tt class="docutils literal"><span class="pre">Alt</span></tt> and the numeric keypad (see the <a class="reference" href="components/bindings/Window-Control-Dakkar">Window-Control-Dakkar</a>
file)</p>
</div>
<div class="section">
<h1><a id="the-preferences" name="the-preferences">The preferences</a></h1>
<p>To be able to select <cite>AmaroK</cite> as a music player, and <cite>amixer</cite> as a
mixer control, I created the <a class="reference" href="components/desktop/dakkar_Preferences">dakkar_Preferences</a> file, which adds
them to the appropriate menus.</p>
</div>
<div class="section">
<h1><a id="the-styles-and-icons" name="the-styles-and-icons">The styles and icons</a></h1>
<p>I added some style declaration and icons for some applications
(e.g. the windows created by <tt class="docutils literal"><span class="pre">xine-ui</span></tt> and <tt class="docutils literal"><span class="pre">xpad</span></tt> should be bare,
and I added icons for <tt class="docutils literal"><span class="pre">xchat-2</span></tt> and <tt class="docutils literal"><span class="pre">skype</span></tt>)</p>
</div>
<div class="section">
<h1><a id="the-functions" name="the-functions">The functions</a></h1>
<p>I redefined a couple of function in the <a class="reference" href="components/functions/Numpad">Numpad</a> to add the
<tt class="docutils literal"><span class="pre">AnyScreen</span></tt> option.</p>
<p>Then I wrote the <a class="reference" href="components/functions/Mixer-amixer">Mixer-amixer</a> and <a class="reference" href="components/functions/Music-amarok">Music-amarok</a> files to interact
with by chosen music programs.</p>
<p><tt class="docutils literal"><span class="pre">amixer</span></tt> is a simple command-line mixer, and its integration was
easy.</p>
<p><cite>AmaroK</cite> is a <cite>KDE</cite> application, and it's not straightforward to
control. At the moment only "random", "repeat", "stop", "play/pause"
and "show/hide" are implemented, all via <tt class="docutils literal"><span class="pre">dcop</span></tt> calls.</p>
<p>The <tt class="docutils literal"><span class="pre">Music-GUI</span></tt> function is used to toggle the display of
<cite>AmaroK</cite>, and also to start it: it the <tt class="docutils literal"><span class="pre">dcop</span></tt> calls fails, the
<tt class="docutils literal"><span class="pre">amarok</span></tt> command gets executed, launching the program.</p>
<div class="note">
<p class="first admonition-title">Note</p>
<p><cite>AmaroK</cite> and <cite>Trayer</cite></p>
<p class="last">For some not-really-clear-to-me reason, the tray icon of <cite>AmaroK</cite>
is not displayed by <cite>Trayer</cite>, normally. To work around this
problem, I have written the small <tt class="docutils literal"><span class="pre">amarok</span></tt> script, which sits in
my <tt class="docutils literal"><span class="pre">~/bin</span></tt> directory (which is at the beginning of my
<tt class="docutils literal"><span class="pre">$PATH</span></tt>). Using this, the icon works as expected.</p>
</div>
<p>I also tweaked a Perl script I found on the Web to create a menu for
my <tt class="docutils literal"><span class="pre">screen</span></tt> sessions, see the <a class="reference" href="components/functions/Screen-Menu">Screen-Menu</a> configuration file and
the <a class="reference" href="scripts/fvwm-screen.pl">fvwm-screen.pl</a> script.</p>
<p>Finally, in the <a class="reference" href="components/functions/Notify">Notify</a> file, I redefined the <tt class="docutils literal"><span class="pre">UrgencyFunc</span></tt> to pop
up a notification via the dbus notification mechanism (using a <a class="reference" href="FvwmNotify.pm">simple
Perl script</a> which uses <a class="reference" href="http://search.cpan.org/~danberr/Net-DBus-0.33.5/">Net::DBus</a>).</p>
</div>
<div class="section">
<h1><a id="rotating-the-displays" name="rotating-the-displays">Rotating the displays</a></h1>
<p>This takes a little background.</p>
<p>First of all, my <tt class="docutils literal"><span class="pre">/etc/X11/xorg.conf</span></tt> file has a <tt class="docutils literal"><span class="pre">Screen</span></tt> section
like this:</p>
<pre class="literal-block">
Section "Screen"
Identifier "dual-nv"
Device "nvidia"
Monitor "LCD"
DefaultDepth 24
Option "TwinView" "true"
Option "MetaModes" "DFP-0: 1400x1050 @1400x1050 +0+0, DFP-1: 1400x1050 @1400x1050 +1400+0"
Option "RandRRotation" "on"
Option "Xinerama" "on"
SubSection "Display"
ViewPort 0 0
Depth 24
Modes "1400x1050"
EndSubSection
EndSection
</pre>
<p>This specifies that, normally, I use my displays horizontally, one to
the right of the other.</p>
<p>Then, in my <a class="reference" href="xinitrc">~/.xinirc</a>, I add a second "MetaMode":</p>
<pre class="literal-block">
./bin/nv-control-dpy --add-metamode \
'DFP-0: 1400x1050 @1400x1050 +0+1050, DFP-1: 1400x1050 @1400x1050 +0+0'
</pre>
<p>The <tt class="docutils literal"><span class="pre">nv-control-dpy</span></tt> program can be found in the source tarball for
the <tt class="docutils literal"><span class="pre">nvidia-settings</span></tt> program, in the <tt class="docutils literal"><span class="pre">samples</span></tt> subdirectory.</p>
<p>You may be wondering: why adding a second MetaMode in this way, when
you can specify both in the <tt class="docutils literal"><span class="pre">xorg.conf</span></tt> file? Good question. The
answer is that, if you do it "the logical way", the always helpful
NVidia drivers will tell the X server that you have a virtual screen
whose size is the bounding box of the union of all MetaModes. Which in
my case would mean that I'd have a lot of panning around, <em>very</em>
irritating when you use multiple viewports. Adding the MetaMode after
the startup of the X server avoids this issue.</p>
<p>In the recipe, I have two functions to set landscape (normal) and
portrait (vertical) orientation. They call <tt class="docutils literal"><span class="pre">xrandr</span></tt> to set the
display orientation and size, and do some repositioning of the various
things that need it:</p>
<ul class="simple">
<li>a script instructs <cite>ROX-Filer</cite> to change its "pinboard" to the one
with the proper layout (this is not optimal, but since I very rarely
change the contents of my pinboard, works well enough for me)</li>
<li><cite>gkrellm2</cite> and my "biff" terminal get moved to their proper
positions during <tt class="docutils literal"><span class="pre">StartFunction</span></tt></li>
</ul>
<p>Maybe there's a samrter way to get the same result, but this works,
and it only took an evening to set up.</p>
</div>
</div>
</body>
</html>