We removed this service unit earlier this week but the EXTRA_DIST variable
still mentions it. Remove it so kmscon builds cleanly again.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
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>
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>
We want to modularize the text-font library, so we need each backend as a
different library. This step links each of them into a different static
library so we can now link them either into the binary or into modules.
This step also makes 8x16 always compiled into the text-font backend so we
always have a working implementation even though no modules might be
loaded.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The man_fixup_aliases thingy was a horrible hack. Replace it with a
temporary .man_fixup file that saves compilation timestamps so we have
post-recipies for man-fixups.
Also fix some minor out-of-tree build problems.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We need the git-revision for module-version checks so provide the
infrastructure now and print it in log_init().
Note that the git-describe string is distributed with the tarballs so
end-users will not have to generate it themself. But when building from
git, the revision will be automatically updated whenever something
changes.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We didn't set the dependencies correctly for uterm libraries as a
backslash was missing. Fix this typo.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We need to mark it as PHONY target as it has no corresponding source file.
It's unlikely that it causes problems, but lets be safe.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Instead of implementing our own thread-safe backend-storage, we now use
the generic shl-registry object.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Instead of implementing a thread-safe backend-system we can now use the
new shl-registry storage module.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The shl-register module is used to create registries of named-objects. The
main purpose for it will be for module-systems were we have different
backends implementing an interface. The registry can then be used to find
a specific module (or the default module).
No sophisticated filter/search mechanism is used as this cannot be done
efficiently in a generic way.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
wcwidth() is a POSIX function that returns the number of cells that a
wide-character occupies. The glibc function cannot be used as it depends
on the locale and we need _always_ UTF8 no matter what the locale is.
This implementation is provided by Markus Kuhn and is equivalent to
xterm's behavior.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The wayland compositor support was some research project that turned out
to not work that well. The main problem is that the DRM planes support
cannot be easily forwarded to a child. Sub-surface support might change
that but until then we remove compositor support.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Add a very basic man-page infrastructure so we can easily add new
docbook-style manpages.
Also add kmscon.1 man-page with a basic overview.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We want only C-source files in ./src and the documents ./docs directory is
meant to contain any other sources.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This moves all systemd code into uterm_systemd.[ch]. This removes all the
ugly #ifdef's.
Furthermore, this fixes some hidden bugs in the previous implementation
and makes use of sd_booted() to see whether runtime systemd is really
available.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
I forgot again to keep these up to date. The conf-layer updates broke them
horribly. However, we now build them correctly without kmscon-core by
including all required layers directly.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We used to simply probe every GPU that is reported by the kernel. However,
if a system has multiple GPUs that share display controllers, we cannot
use both simultaneously. Unfortunately, the kernel currently does not
notify us about this. Hence, we use some heuristics to determine which GPU
is the boot-gpu/primary-gpu.
This only adds the detection logic, it does not modify any code to use
this detection at all.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
If libfuse is available then kmscon is built with a new session type: cdev
This session creates a fake TTY char-dev via CUSE (which itself uses FUSE)
which then can be used by user-space as if it were a real VT.
This is still incomplete and does only support basic I/O, yet. But it
shows in what direction this is going.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We build several tools inside of this repository and we need to make sure
all dependencies are met. Furthermore, we must make sure that default
values are recognized even on dependencies.
Hence, this reworks the whole configure.ac handling and does some renaming
of the constants that are used all over the source.
We need to test this some more weeks, but it should finally be a proper
autotools handling that we can release with kmscon-6.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The dummy session is a very simply session implementation that simply
draws a black background. It will be used by each seat as fallback if no
other session is available. If we didn't do that, we wouldn't be able to
guarantee that the screen is cleared after a session is unregistered.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We needed these files before libxkbcommon had a function to convert
keysyms to unicode, and then for the 'plain' keyboard backend, which
didn't use libxkbcommon. Since this backend was removed, these files are
no longer needed.
Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This adds a wayland compositor which registers sessions for each top-level
window within kmscon. This means, you can run any arbitrary
wayland-application on kmscon. Each top-level window that is registered by
the applications is put into a separate session and you can switch between
the sessions with the previously introduced session-shortcuts.
The compositor is still very basic. It doesn't support input devices at
all (not even talking about DnD). The only thing it does is surface
management (and even that is not fully implemented).
However, this shows the direction that kmscon will go. You can run the
Wayland "simple-shm" and "simple-egl" demos on kmscon to see how it works.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
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>