Thanks for taking interest in fxWM! This project is currently still in
beta, but aside from several known bugs this software is stable. This is
an active project and is part of a larger set of programs. We will add
a small list of items we want to implement, but for a full, up-to-date
list, please visit our website @ http://www.cliquesoft.org.
TODO
- add _NET_WM
- expand the css declarations
- create additional supervisors
- Multi-monitor support
- Screen capture abilities
To Compile:
1. Make any desired changes to config.h and io.h
2. From source dir: ./make [PREFIX=/packaging/dir]
To Compile and Install:
1. Make any desired changes to config.h and io.h
2. From source dir: ./make [PREFIX=/packaging/dir] install
Examples of Starting:
fxwm -S /usr/bin/terminal
fxwm -F -S /usr/bin/terminal
fxwm -F -BG -S /usr/bin/terminal -o 0:0:40:0
Examples of other supervisors:
wbar fxwm -S /usr/bin/wbar -o 0:0:32:0
web.de fxwm -F -S /usr/bin/web.de -c -o 0:0:0:40
Desktop
While still the most popular application of a window manager, fxWM goes
a step further than the competition by allowing for the complete user
defined configuration of the looks and layout of the window chrome. Also
included is the ability to communicate via socket and fifo to implement
real-time changes and event responses! To see some examples, check out
the "Some Examples" segment below.
Mobile
Today, more and more devices are becoming mobile. As a result we wanted
to make a window manager that worked in this enviroment as well. Start
by modifying the chrome.css file to adjust the window padding for all
running applications (using the ".window { padding-* }" values). Now be
sure to start FXwm with the "-f" switch which will make all software
run in fullscreen mode without the titlebar. You may additionally want
to use the "-o" switch to keep some part of the supervisor exposed as
a way to retain navigation of the underlying system.
Kiosk
These can be found everywhere and typically need only a single
application running at all times. However, when something breaks, you
may need to regain traditional desktop functionality of the device. To
achieve this using fxWM, start the system as usual, issue a full screen
command for the desired window, and finally disable the window manager.
1. Find all running windows
# echo list | socat - /tmp/.fxwm-control
0x02003* 0 Host kiosk My_Kiosk_App
0x02011 0 Host web.ui web.de
2. Full screen the 'kiosk' application
# echo "set 0x02003 state fullscreen" | socat - /tmp/.fxwm-control
OK
3. Disable the window manager
# echo disable | socat - /tmp/.fxwm-control
Now when you press the toggle key combination (CTRL+ALT+t by default),
the window manager will toggle between being enabled and disabled.
Please note, that in order to make this work as described, fxWM must
have been compiled with the TOGGLECODE_HOTKEYS turned on (via config.h)
along with your desired key combination defined in the io.h file.
Dependencies:
There are only several binaries that need to be installed in
order to compile this package:
o Standard tools such as find, grep, cut, etc
o Bash
o A C/C++ compiler such as gcc/g++
o FLTK 1.3 dev package for your distro
To Compile:
Currently there is no need for the 'make' system in order to
build this software on your system. To compile this software you
only need to issue the following command from inside the source
directory:
./make [PREFIX=/packaging/dir] [install]
If you simply want to compile the software, then do not include
any of the optional parameters. If you do wish to install after
building, then at least include a trailing 'install' switch.
Package maintainers can optionally provide the 'PREFIX' switch
to define where the directory tree should be installed for easy
packaging of the software. If you are uncertain what a package
maintainer is, then you should not use the 'PREFIX' switch.
You should, however, look at the config.h and io.h files to
make any hard coded changes before the compiling process gets
started. Those files contain which features the software will
have along with hotkey values.
To Start:
Unlike most, if not all, other window managers, this wm actually
only manages the windows. Any desktop environment "supervision"
has been removed, so things like a taskbar or right-clicking on
the desktop background to activate a menu system, will not work.
Instead, you define what you want to use as the "supervisor" of
your system. The most basic example of this would be any one of
many terminal emulators such as 'aterm' or 'konsole'. This would
allow you to start any supplemental software from the console
when calling software in the background (e.g. with a trailing
ampersand '&' character). Another option could be to use 'wbar'.
We also have built another software known as 'web.de' that can
use a web browser to control the environment. See our website
(http://www.cliquesoft.org) for more information.
Since a supervisor is required in order to run the software, you
must tell fxWM what it is so that certain conditions no longer
apply (e.g. the ability to stop or close it). There is also many
other switches to control both the supervisor and applications
independent of one another. To see them simply type:
fxwm --help
To Demo:
If you would like to demo the software before installing it on
your system, you can use a nested X server such as Xephyr or
Xnest. An example as been included below:
Xephyr :1 -screen 1024x768 &
fxwm -F -S /usr/bin/konsole -o 0:0:40:0 -display localhost:1
Some Examples:
SOCKETS
In the event you would like to use sockets to communicate with
the fxWM window manager, we will provide some basic examples
below:
To refresh the window chrome in the GUI after making any
adjustments to the ~/.fxwm/chrome.css file:
# echo chrome | socat - /tmp/.fxwm-control
To get the current limits that a window can occupy when
in the fullscreen state:
# echo 'get limit' | socat - /tmp/.fxwm-control
1920x1045
To set new limits that all windows can visually use:
# echo 'set limit 1024x786' | socat - /tmp/.fxwm-control
To show the current applications list type:
# echo list | socat - /tmp/.fxwm-control
To make a windows' state become maximized try:
[NOTE: the 0x02003 value came from the above list call]
# echo 'set 0x02003 state maximized' | socat - /tmp/.fxwm-control
To see a demo of an alert:
# echo 'false||App Name|Test Title|Some text as the body \
of the alert|' | socat - /tmp/.fxwm-control
MONITOR
As users interact with fxWM, certain events get triggered which
can be harnessed by the supervisor to perform some subsequent
action. Reading from the FIFO is simple and can be performed by
executing the following:
# read EVENT < /tmp/.fxwm-monitor; echo "$EVENT"
To do something meaningful however, you must incorporate a litte
more code...
# read E < /tmp/.fxwm-monitor; if [ "$E" -eq 'run' ]; \
then echo "The user is requesting the run menu"; fi
Now when the user presses the hotkeys for the "Run Menu" (which
are CTRL+ALT+R by default), you will have the above message
shown in your terminal.
More Info:
More information can be obtained by looking through the man page
for this project.
o Unpredictable results with the absence of a fully-defined chrome.css
o Not all chrome.css declarations in chrome.css are implemented
o Some dialog windows stay in the ALT+TAB window after they have been
closed (e.g. the Search/Replace screen in gedit)
o First window that is opened does not receive focus upon loading - all
subsequent window creations do
o Crashes when focus is taken off certain dialog windows (e.g. Firefox
Save-As)
o The ALT-TAB window will popup randomly when clicking around the
windows' titlebar
o Can not assign the META keys as key combinations for window manager
functions such as 'Show the Desktop' (keymap issue?)
http://tinycorelinux.net/faq.html#keyboard
http://forum.tinycorelinux.net/index.php?topic=19847.0
o Buttons with dis-similar widths cause misalignment with other titlebar
objects
o The alert's 'top' chrome.css value of less than '20px' does not work
o Refreshing the chrome after titlebar resizing and/or relocation will
crash the window manager
This software currently contains files from various projects to expand
its capabilities, but can be configured to not use them. As a result
this package has to be released under a dual license, CPLv2 and GPLv2+.
Both licenses are compatible with one another so there should not be any
issues there. We will cover the licensing of the files below:
Core (CPLv2)
o alerts.*
o capture.*
o chrome.*
o icons.*
o io.*
o main.*
o socket.*
o switch.*
o window.*
Extras (GPLv2+)
o Desktop.* Enables multiple desktops
o Rotated.* Enables movement of titlebars
Since we are working with several many projects (13 on github alone),
we are going to provide an anticipated timeline of releases using
internal staff. Obviously outside contribution will advance these
forecasted dates.
2025 Oct - completion of ModuleMaker for webWorks
2025 Dec - migration of existing webWorks modules using ModuleMaker
2026 Jan - migration of Tracker into webWorks and deprecation of
of standalone project
2026 Feb - update paged to 2018 code base from ACME
- update pax to work with (TC) TinyCore Linux
- apply any patches for bug fixes to existing projects
2026 Mar - update web.libs for dittodata and web.de
2026 Jul - move code from web.de into cli.de and update the former
to use the latter via XML communication
2026 - rest of 2026 tbd