40 Commits

Author SHA1 Message Date
David Herrmann
0249b2cb0b shl: move log.[ch] to shl_log.[ch]
We want to avoid any static files that are shared between multiple
programs but are not part of SHL. These make the build-process just more
complex.
Move log.[ch] to SHL so we have a known context.

Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
2013-03-04 14:40:36 +01:00
David Herrmann
577a9b4c41 llog: add "data" parameter to pass context
If we allow users to specify log functions, we should also allow them to
pass a context. This isn't used internally, but may be needed by external
users so provide it.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2013-02-08 16:14:48 +01:00
David Herrmann
0f206cc5b5 uterm: drm: rename to drm3d
This renames the video-drm backend to drm3d (which was already used
internally). This is a pure rename, the code-logic stays the same.

This also puts the drm3d backend into a module so we can more easily
load it during runtime.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2013-01-24 16:42:03 +01:00
David Herrmann
f289349ef9 uterm: rename drm-dumb backend into drm2d module
This moves all the drm-dumb code into a new module that is now called
drm2d (which was already used internally before).

No conceptual changes, just renames and moves.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2013-01-24 14:42:54 +01:00
David Herrmann
694f451ae8 uterm: video: modularize video backends
We want to allow dynamic backend loading during runtime so we need to
avoid static definitions. This converts the backend IDs into module
structures which are then linked into the binary.

To make this fully modular, we need to load the backends dynamicly via
dlsym() and move all the static declarations from uterm_video.h into the
backends. But for now at least the backends can be easily exchanged and
configured during compile-time.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2013-01-11 12:16:43 +01:00
David Herrmann
cadb3e0899 uterm: move uterm.h to uterm_monitor.h
uterm.h contains only uterm-monitor related APIs so rename it.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2013-01-07 19:37:44 +01:00
David Herrmann
407a5fc158 uterm: move uterm-vt into uterm_vt.h
This splits off uterm-vt from the main header to reduce the dependencies
on uterm.h.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2013-01-07 19:31:27 +01:00
David Herrmann
2047b56c80 uterm: move input related API to uterm_input.h
This splits off the uterm-input API from uterm.h to avoid depending on
uterm.h everywhere.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2013-01-07 19:22:38 +01:00
David Herrmann
50cfef008b uterm: move video API into uterm_video.h
Split the main header to avoid having it as dependency in so many places.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2013-01-07 18:03:45 +01:00
David Herrmann
995c07f853 kmscon: make bblit mandatory
Similar to the font backends we now require one backend to be always
available as safe fallback. The bblit backend is the most basic backend so
make it mandatory and link it unconditionally.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2013-01-03 17:48:23 +01:00
David Herrmann
a8c1d8bbf1 kmscon: add module support
Several parts of kmscon have huge external dependencies. However, we allow
them to be disabled during build-time. But this is not enough as it
requires distributions to choose which options to use. Therefore, we now
allow dynamicly loadable modules that can optionally be installed and
kmscon automatically picks them up.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2013-01-03 16:21:18 +01:00
David Herrmann
0248318732 text: remove load/unload helpers for text-font backends
With modules we no longer need to conditionally load backends. Instead
each module will register the backend with the main application on load.

This will temporarily break pango, freetype2 and unifont backends as they
are not registered until we introduce full module support.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2013-01-02 18:14:48 +01:00
David Herrmann
6e8fb5aa0d kmscon: add --seats=current option
This option uses XDG_SEAT to determine the current seat. If this is NULL,
we fall back to "seat0".

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-09 18:34:26 +01:00
David Herrmann
5e8ce520c2 kmscon: remove broken vt_eloop concept
We tried to avoid running unused code during shutdown by moving VT
handling into a separate eloop and run it exclusively. However, with
delayed VT switching, we need to run other event-handlers to make the VT
switch work. Therefore, run all of this during shutdown and remove the
vt_eloop event-loop.

This means that we might create new seats, displays, etc. during shutdown.
This is valid and doesn't harm kmscon, but we want to avoid doing stuff
that is undone few miliseconds later. Therefore, we set a "exiting" flag
and check that before initiating most of the big handlers.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-09 14:14:41 +01:00
David Herrmann
29625b186d seat: start hotplugged seats if --switchvt is given
We currently only start seats (switch to their VT) during startup but we
should also do that for hotplugged seats. Therefore, move that logic into
kmscon_seat and perform the startup after the seat is fully set up.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-09 13:50:38 +01:00
David Herrmann
06a50ce58c kmscon: remove unused 'out' arguments
We don't use the newly created objects so no need to return them.
Furthermore, we want the functions to already perform actions on the
objects so there is no guarantee the objects are still alive after
function return. Thus, simply return nothing.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-09 13:44:52 +01:00
David Herrmann
cec87f029c kmscon: move video-device uterm-monitor handling
Same as previous commit: Move uterm-monitor device-data handling into the
real device create/destroy functions to allow dynamic device removal.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-09 13:41:28 +01:00
David Herrmann
c4a1a33597 kmscon: set uterm-seat data in seat-creation
If we want to be able to destroy seats from anywhere, not just
uterm-monitor callbacks, we need to be able to reset the monitor-event
seat-data so we no longer access the seat memory.
Hence, move the seat-data set/reset logic into the actual seat
creation/destroy functions.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-09 13:37:39 +01:00
David Herrmann
add239ee2c seat: pass allowed VTs from caller
We should handle everything --listen related in kmscon_main so pass in the
allowed-VTs mask from the caller.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-09 13:26:45 +01:00
David Herrmann
fd098b828c kmscon: ignore SIGPIPE
Ignore SIGPIPE globally. We handle HUP correctly everywhere and this
signal is just annoying.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-06 14:49:56 +01:00
David Herrmann
4ceb557ecb kmscon: run only on VT-less seats in listen-mode
If we run in listen mode, we are supposed to take over a seat. If a seat
supports VTs (like kernel VTs or kmscon cdev fake VTs) we assume that
there is some manager for these VTs (the one who created them). Therefore,
there is no need to run kmscon in listen mode on these seats. Instead, you
should run kmscon in default mode on these seats.

We enforce this limitation because if the VT-master on those seats dies
and causes a HUP, they have no way to notify us when they startup again.
Therefore, this kind of setup is broken. Furthermore, no-one would every
want such setups.

Instead use the startup mechanism of the VT/seat-manager to start kmscon
in default mode on those seats.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-06 14:18:57 +01:00
David Herrmann
2ac9421377 kmscon: introduce new --listen mode
Instead of configuring everything for every kind of situation, we now
split kmscon into two modes: default-mode and listen-mode

In default-mode we run on the given seats once until we encounter a HUP or
until we are closed. It's a perfect replacement for agetty.

In listen-mode, we run only on non-VT seats and provide the full kmscon
functionality. We run as system daemon and wait for new seats and close
seats if they are destroyed. We simply provide a full system-console on
all seats.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-06 13:55:00 +01:00
David Herrmann
b972ebb102 kmscon: replace gpu selection modes with new --gpu option
Instead of using one option for each selection mode, we now provide a new
option --gpus. It takes as argument the selection mode to use.

We also remove the --video-devices option as it doesn't fit into the big
picture. Instead, we should provide a blacklist and users would then use
--gpu=all --blacklist-video=<blacklist> instead.

However, blacklisting is also required for input devices and until we
figure it out, we will provide no blacklisting at all.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-06 11:36:46 +01:00
David Herrmann
5d94e9eb48 seat: forward HUP to caller
We now forward VT_HUP to the caller so they can react on it. Default
behavior is to shutdown this seat. In single-seat mode we also close the
application.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-02 12:42:35 +01:00
David Herrmann
145e6fc402 main: correctly remove all displays on uterm-video shutdown
If we close an uterm-video object, we must correctly remove all displays
first.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-11-28 22:16:07 +01:00
David Herrmann
4d65024ab5 seat: implement delayed session switching
If we want to allow external programs to control sessions inside of
kmscon, we need to give them some time for session
activation/deactivation. Therefore, the whole session-management is
asynchronous now and allows the session code to return EINPROGRESS or
similar if they need more time.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-11-10 16:46:58 +01:00
David Herrmann
a9c61f7644 kmscon: add --video-devices option
If all the auto-detection logic of kmscon still does something you don't
want, you can now use this list to override all this logic with a
statically configured white-list.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-28 16:02:28 +01:00
David Herrmann
fb2006fe9a shl: add shl_string_list_is() helper
This helper tests whether a string-list has only a single entry and
compares this with the given entry.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-28 16:01:47 +01:00
David Herrmann
3085b252ca kmscon: replace --fbdev/--dumb with --drm/--hwaccel
The old options were quite stupid and low-level. It doesn't make sense to
require users to understand "--dumb" (besides, it sounds wrong).

Therefore, two new options replace the old options:
 --drm: Enabled by default. If true, kmscon uses primary DRM devices and
        avoids primary fbdev devices. If false, kmscon uses no DRM devices
        at all but uses primary fbdev devices now.
 --hwaccel: Disabled by default. If true, kmscon tries to
            hardware-accelerate any rendering if available. This can also
            affect fbdev or other devices in the future.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-28 15:20:20 +01:00
David Herrmann
f5a98b0c6b kmscon: fix --fbdev implying --all-gpus
We currently have no code that sets PRIMARY flags for fbdev devices so
this logic does not make sense with --fbdev. Hence, imply --all-gpus when
--fbdev is set.

Reported-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-27 19:21:56 +02:00
David Herrmann
5be8972270 kmscon: add --primary-gpu-only and --all-gpus options
By default, kmscon now only uses primary und auxiliary displays. All
uncategorized displays are ignored. This fixes problems with dual-GPU
systems.

--primary-gpu-only makes kmscon not use any auxiliary displays. --all-gpus
makes kmscon also use uncategorized displays.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-27 18:00:27 +02:00
David Herrmann
9015f3107d uterm: monitor: add "dev_flags" field to event-structure
Instead of using different types we now use flags. This is more
appropriate and will allow us more easily to add new flags.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-27 13:41:23 +02:00
David Herrmann
9e0db18fb9 kmscon: use local configs instead of global kmscon_conf
We now have the ability to pass on local configurations so we no longer
need the global kmscon_conf.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-19 17:18:58 +02:00
David Herrmann
06c6e56d4c kmscon: implement per-seat configuration
Sorry for the huge commit, but this reworks the whole configuration
handler. We now provide conf_ctx contexts which contain a pointer to the
backing storage and the config-options that are used.

It is also possible to copy config-options now. So we can use the
main-config as default value for seat-configurations.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-19 16:15:34 +02:00
David Herrmann
c1536ad6b1 kmscon: add helpers to access kmscon_conf
We are about to introduce per-seat-configuration so we need some helper
macros that will later select the right configuration that we read from.

These helpers simply hook into the kmscon-config and return the correct
value.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-18 15:10:42 +02:00
David Herrmann
35d7cc33ec kmscon: reorganize configuration items
This just rearranges all options so they are logically grouped and in the
same order at all places. It also changes the internal variable for
"--fbdev" from "use_fbdev" to "fbdev" so all variables have the same name
as the option-names.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-18 13:45:49 +02:00
David Herrmann
11eaec0e68 Introduce session management
On seats other than seat0 we do not have any session-management, because
VTs are not available. Furthermore, if we want to get rid of CONFIG_VT
entirely, we also need to provide session-management for seat0.

This commit introduces sessions. Every seat (seats are now managed in
kmscon_seat.c) can have registered sessions. One of the sessions is active
and gets control over all displays. Session switching is entirely handled
inside of kmscon so there is always an active session (except if no
session is registered at all).

This also reworks the seat-management. kmscon_main.c now only manages the
seat allocation/deallocation and video-objects. The seat itself is handled
inside of kmscon_seat.c and does not know of uterm_video objects. Instead,
it is assigned a list of displays that it can use. Everything is still
hotplugging capable so user-experience should be the same as before.

The kmscon_terminal layer is reworked to be session based. So every
terminal is now a single session. By default, a single terminal-session is
created for each seat. This may be changed, though.

There is currently no input-control to change between session with
keyboard hotkeys. However, this will be added when we have more than one
session.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-11 10:54:01 +02:00
David Herrmann
26949d961a kmscon: move config-handling to kmscon_conf.c
Configuration handling is totally independent from kmscon_main.c so we
move it into a separate file to avoid cluttering up kmscon_main.c.

This also does some basic initialization in kmscon_conf.c which is solely
related to configuration handling and logging.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-10 21:32:12 +02:00
David Herrmann
e2266c9986 kmscon: move kmscon_main.h to kmscon_conf.h
Everything in this header is solely related to configuration parsing so we
should name it properly. We will also move the configuration-handling from
kmscon_main.c to kmscon_conf.c in some of the next commits to clean up
kmscon-main.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-10 21:23:38 +02:00
David Herrmann
1709c64ee6 Prefix kmscon sources with kmscon_*
We will be adding more applications to this repository, so to keep better
overview, we prefix kmscon sources with kmscon_*.

The only sources that have no prefix are either shared between
applications (i.e., statically linked) or they were not cleaned up, yet.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-09 13:53:55 +02:00