VWM : Downloading

Protothreads library here : Libviper library here : Libvterm library here : VWM here

VWM : About

Viper Window Manager (VWM) is a lightweight, extensible window manager for the console. From conception, VWM was designed to be both lightweight and ssh friendly. Character based line-art compresses very well as do the escape sequences which handle cursor manipulation. This makes VWM quite suitable for low-bandwidth, remote connectivity over ssh.

VWM : About : Mouse

VWM was designed to be completely functional with only the keyboard. However, optional support is provided for those systems running GPM (sorry no sysmouse support yet).


Q. Why would you create a window manager for the console? Have you not heard of X?

A. Yes. I am very familiar with X. I use it everyday and love it! However, there are several reasons why you might want to use a tool like VWM:

  • Many servers do not run X because of the increased security risks of poorly tailored security policies.
  • Antique machines with older graphics cards may not run X well (386 & 486 machines with 256K or 512K video cards).
  • Opening many xterm/ssh sessions to the same remote system can get very confusing quickly. Instead, open one secure shell to the remote box and then open as many terminal shell instances as you need.
  • Many distributions support vesa framebuffer on the console. These video modes offer more than 80×25 columns/lines of resolution on a standard tty.

Q. Why use VWM when there are other similar programs like Twin and Screen?

A. I respect both of these projects. If you must have absolute compatibility with your console applications, Screen may be a better choice for you. If you are looking for something that is easier to manage and doesn’t require memorizing a lot of hotkey sequences, then VWM is probably better. As for Twin, it appears to be unkempt. The project seems to have gone stale as of the past few years. Also, IMHO, Twin began to dabble in X window management and became needlessly complicated. It also does not seem to play well with UTF encodings.

Q. How can I contribute to VWM?

A. There is plenty of room for improvement. If you have discovered a bug, please visit GitHub repository submit a bug report. If you are a developer, please feel free to send submit a fix via a pull request. Code must be clean and well documented if the logic is not readily apparent. Please keep portability in mind and avoid system specific methods whenever possible.

Q. Can I run VWM inside of a VWM session?

A. Theoretically it is possible to run VWM inside of another instance of VWM using the Terminal Shell (libvterm). However, each nested instance will need to have a unique hotkey configured for the menu. Otherwise, the hotkey will be trapped by the “real” instance of VWM and so you will never be able to open the menu on the second session. Why you would want to do this is beyond me.

Q. Why does VWM use plus, minus, and other basic characters for line-art when other systems use the more fancy Alternate Character Set (ACS) graphics?

A. VWM relies on ncurses for drawing. The behavior of ncurses depends heavily on environment settings and the locale configuration for your system. For more information see the manpages for locale and setlocale.

Q. Some programs won’t start in terminal because there are not enough lines and columns. How can I fix this?

A. This normally happens when you are running VWM on a standard 80×25 tty console. Obviously, the vterm session has to be smaller than that to accommodate the window border and window controls. You need to increase the amount of screen real estate available to VWM. Here are several suggestions:

  • Run VWM inside of an xterm session.
  • Set vga=extended in your boot loader configuration to get 50 rows of text. Most likely you will also need to change your font in /etc/sysconfig/i18n
  • Use the vesa framebuffer option for your console (if it is available).
  • Change your console font to something like drdos8x8 in /etc/sysconfig/i18n. This will give you more columns on your screen.
  • If you are lucky enough to have an older card that supports 132-column mode, you might try that in combination with 50 row mode. I don’t have one of these, but it would be fun to try.

My personal preference is to set my vesa framebuffer mode to 800×600 with 16bpp (vga=771). You can combine that with a console font like drdos8x8 and squeze quite a bit on to the screen while maintaining zippy performance.


Q. When VWM is run in xterm, I cannot see the windows movements during a window drag operation. Why is this?

A. Unfortunately, the mouse tracking facilities offered by ncurses under xterm are not as robust as those for the console. VWM relies on these facilities for those window dragging operations.

Q. Does VWM work on FreeBSD and other Unix-like implementations?

A. Not yet. There has been some intrestest from indifiduals in the FreeBSD community, but there is nothing yet. Patches on this are welcome.

Q. In the screenshots, mplayer is running in the terminal shell. How do I do this?

A. mplayer -quiet -framedrop -monitorpixelaspect 0.5 -contrast 10 -vo aa:driver=curses <file>