= KMSCON = Kmscon is a simple terminal emulator based on linux kernel mode setting (KMS). It is an attempt to replace the in-kernel VT implementation with a userspace console. == Requirements == Kmscon requires the following software: - libudev: providing input, video, etc. device hotplug support - libxkbcommon: providing internationalized keyboard handling Everything else is optional: For video output at least one of the following is required: - fbdev: For framebuffer video output the kernel headers must be installed and located in the default include path. - DRM: For unaccelerated drm output the "libdrm" library must be installed and accessible via pkg-config. - OpenGLES2: For accelerated video output via OpenGLESv2 the following must be installed: libdrm, libgbm, egl, glesv2 (i.e., mesa) For font handling the following is required: - 8x16: The 8x16 font is a static built-in font which does not require external dependencies. - freetype2: The freetype2 font uses libfreetype2 and libfontconfig to provide a very basic font backend. - pango: drawing text with pango Pango requires: glib, pango, fontconfig, freetype2 and more For multi-seat support you need the following packages: - systemd: Actually only the systemd-logind daemon and library is required. == Install == To compile the kmscon binary, run the standard autotools commands: $ ./autogen.sh (you need this only when building from git directly) $ ./configure [--enable-debug] (debug-mode is strongly recommended) $ make $ make install (TODO: this is currently not supported) To compile the test applications, run: $ make check If you want only a very basic kmscon program without any major dependencies, use: $ ./configure --disable-debug --disable-drm --disable-systemd --disable-pango --disable-freetype2 However, you will loose a lot of functionality by dropping all dependencies. The following configure options are available. If build-time dependencies cannot be satisfied, an option is automatically turned off, except if you explicitely enable it via command line: --enable-systemd: This requires the systemd-logind library to provide multi-seat support for kmscon. [default: on] --enable-udev: This requires libudev for hotplugging support. This is currently mandatory and cannot be disabled. [default: on] --enable-fbdev: This adds fbdev video output support. [default: on] --enable-drm: This adds DRM video output support. [default: on] --enable-gles2: This adds OpenGL hardware accelerated font rendering [default: on] --enable-f8x16: The 8x16 font is a static built-in fallback font [default: on] --enable-freetype2: Uses freetype2 and fontconfig as font-backend. [default: on] --enable-pango: Uses pango as font-backend. [default: on] --enable-bblit: Use simply 2D bit-blitting as renderering fallback [default: on] --enable-debug: Enable debug mode [default: off] --enable-optimizations: Use GCC code optimizations [default: on] == Running == To get usage information, run: $ ./kmscon --help You can then run kmscon with: $ ./kmscon [options] For debug output use "--debug". For verbose output use "--verbose". If you didn't compile DRM support then you can use "--fbdev" to make kmscon select available framebuffer devices. With "--xkb-layout=" you can switch the keyboard layout. == License == This software is licensed under the terms of the MIT license. Please see ./COPYING for further information. == FAQ == Please see http://github.com/dvdhrm/kmscon/wiki == Contact == This software is maintained by: David Herrmann If you have any questions, do not hesitate to contact one of the maintainers. == Code Base == The kmscon code is split into several independent subsystems: - uterm: This code manages the KMS/DRI output and provides OpenGL framebuffers. - console: This draws the text on the screen and provides an API for any terminal emulator to visualize its contents. - eloop: Main loop implementation. - log: Log file handling. - unicode: Provides basic Unicode handling. - font: Font loading, caching and drawing operations. - input: All linux input events are captured here and converted to Unicode characters for input handling. - vt: The linux VT subsystem integration. This allows to run the application in a classic linux VT like X does. - vte: The terminal emulator library. - terminal: Connects the console, output, input and vte handling into a real terminal. - main: This connects all subsystems into a usable console application.