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>
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>
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>
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>
We made xkbcommon mandatory some time ago and there is no reason to keep
this plain backend around anymore. It isn't tested at all and provides no
real advantage over xkb.
Even for debugging it is easier to use XKB.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
When adding new elements, we should add them at the tail, not at the
front. And when removing elements, we should remove them from the tail,
too.
We also convert the whole stuff to the shl_dlist API so we do not have to
manage the linked-list ourself.
Note that this silently breaks the idea of having multiple listeners with
the same function+data in the hook. This is because removing the listener
may now change order of two identical entries, as we don't know which of
them to remove. That means, when adding two identical entries, you cannot
rely on them to retain their position in regard to each other.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Input offers are used to implement pasting data from other applications.
This adds the infrastructure to operate on data-managers and allows
applications to retrieve the currently active selection-data via a
file-descriptor.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We now use xkbcommon in lots of places so add the build-flags to all
libraries and applications that use it.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We really need xkbcommon. There is so much stuff (including parsing of
keyboard shortcuts in conf.c) that depends on it. Therefore, we make it
mandatory now which allows us to use xkbcommon functions all over the
place.
Note that xkbcommon itself has no runtime dependencies so it is a small
self-contained library. The only reason I didn't do this ealier is that
xkbcommon has not seen a public release, yet. However, that should be done
in the near future.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The getty variants out there (including agetty) require an relative path
to the /dev directory as argument. This is really odd but we want to be
backwards-compatible to them so we allow this, too.
--vt now accepts:
* A positive number which is internally converted into /dev/ttyXY
* A string that does not start with '/' or '.' which is interpreted
relative to /dev as /dev/%s
* Everything else is interpreted as path
This option still selects only the TTY on seat0. On all other seats we do
not use controlling TTYs.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The standard C/POSIX helpers are really ugly to use. This small helper
returns 0 on success, otherwise an error.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
wlterm needs xkbcommon as the wayland protocol depends on XKB states.
Hence, we add a hard-dependency for wlterm.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We want to use the font-rendering layer in wlterm so we need to split this
out. Gladly, the layer has only a build-time dependency on uterm and not
other hard-coded stuff. That is, we have no cleanup to do.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Create TSM screens and VTE objects plus a PTY and connect everything so we
have a working terminal. Keyboard input still needs to be hooked up and
the drawing functions aren't implemented, yet.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Sorry for the big commit, but I was working on the wlterm application and
then thought I can rework the whole configure-logic again. This mainly
renames all build-defines to BUILD_DEFINE_* and BUILD_HAVE_* and allows
specifying which applications to build via --enable-kmscon/--enable-wlterm
and similar.
wlterm is a new application which is a native wayland client with no
external dependencies. It serves several purposes:
* It uses TSM (not yet implemented, but will come soon) to create a
console independent from kmscon. This shows how TSM can easily be used
to create independent terminal emulators.
* It is a native wayland application (probably the first independent
wayland app so far?) and is used to test how well the wayland API
works. As wayland is still under heavy development, we need more
application-writers who report back whether the wayland-API makes
sense to them and whether it works correctly.
* A proper terminal-emulator for wayland! There is currently no proper
emulator so we really need something that we can work with.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We sometimes need to test what keys a client receives when specific keys
are pressed. This small helper simply runs in a terminal and receives raw
keyboard input and prints it to stdout with debugging information.
This can definitely be improved with the help of the TSM state-machine to
print more useful information and directly parse the input. However, this
is better than nothing.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
uterm-keysyms.h is no longer available but the makefile still references
it. Remove all occurrences of it to fix build again.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
All TSM files use the "tsm_*" prefix and the object is now named "screen"
so rename the files to resemble this.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
There is absolutely no need to use kmscon-static anymore so move it into
kmscon-core/uterm as it is used by kmscon-core and libuterm exclusively.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This is the last static helper that is moved so as a next step we should
get rid of the "static" library entirely.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We might argue whether llog should be kept separate, however, shl is a
loose pile of headers and sources so pushing llog into it seems
reasonable.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This moves the timers to SHL and removes the old static_misc header and
source. They are no longer needed.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The ring implementation is only used in one place so move it into SHL to
avoid linking it into all other libraries and applications.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This moves the whole hashtable implementation into the SHL library. Now we
can link it only to the applications that really use it.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We need a copy of xkbcommon-keysyms.h as long as xkbcommon is not included
in all major distributions. We _need_ this build-time dependency,
otherwise, we cannot build the other keyboard backends.
However, requiring xkbcommon as build-time dependency is not a solution as
no major distribution includes it.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The fakevt tool is no longer used. The same functionality was integrated
into kmscon with the fake-VT uterm_vt backend.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We intend to make libuterm independent of kmscon so it can be used by
other projects. Therefore, add a pkg-config file for easier integration
into other build systems.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The pkg-config file allows other users of libeloop to more easily
configure build-time options for eloop.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This never really worked and was horrible to maintain. We need to find
something else for documentation, but we will probably have to do it with
a separate XML file without any generator.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We need to include everything in the distribution and fix the
include-path, otherwise, we might get "distcheck" errors.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This removes the nasty dependency to libkmscon-static for libeloop.
Otherwise, we might end up with GLESv2 dependencies here which is really
not what we want.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This makes the hook implementation independent of any other code or header
so you do not have to link to libkmscon-static when using it.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This creates a new header static_dlist.h which is independent of any other
code. It can be included by other libraries/applications without the need
of linkin to libkmscon-static which reduces a lot overhead.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The bbulk renderer is very similar to the bblit renderer but it assembles
a request-buffer of all characters and then pushes these requests via a
vector-call to the video hardware.
This turns out to increase performance slightly as we do not call into the
video subsystem for every characters but only once.
This renderer can reduce performance when used with partial-redraws (which
are not implemented, yet), so we keep the bblit renderer around.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
kmscon-static needs these to build properly. Currently, they are pulled in
via uterm but if it is used without uterm the build will fail.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This adds a new Unifont font-backend based on the recently added Unifont
data. The backend is disabled by default for 2 reasons:
- It takes about 5min to compile and needs >1GB of memory on an Intel
Atom N450
- License situation is unclear as it is GPL
Written-by: Ted Kotz <ted@kotz.us>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This new generator converts the unifont hex-encoded data into a C-source
file which then can be compiled statically into the kmscon binary. Please
note that the resulting source file is bigger than 100MB and can take
quite a while to compile.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Defining *_la_CPPFLAGS var in "if...endif" block breaks generation
of Makefile.in - automake assumes it's defined unconditionally and
uses it for building objects.
configure.ac clears all variables if each dependency is disabled so we can
include it unconditionally.
Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
CC src/static_gl_math.lo
In file included from src/static_gl_math.c:35:0:
src/static_gl.h:36:23: fatal error: GLES2/gl2.h: No such file or directory
CC src/static_gl_shader.lo
src/static_gl_shader.c:36:23: fatal error: GLES2/gl2.h: No such file or directory
Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>