70 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
Jakub Wilk
37f88bd384 Fix several typos
Provided via github. Fixes typos in documentation and comments.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2013-02-11 16:24:21 +01:00
David Herrmann
aad2715cf4 build: major cleanup
Major overhaul of the build system. This introduces symbol-versioning for
all exported libraries. Please note that none of these libraries is
stable, yet!

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2013-02-06 01:22:10 +01:00
David Herrmann
1ef166c12c eloop: add EV_ONESHOT and EV_SINGLE flags for idle sources
EV_ONESHOT will remove idle sources once they have been processed and
EV_SINGLE will only register the source if it hasn't been registered, yet.

For source removal EV_ONESHOT has no effect but EV_SINGLE causes all
events with this cb+data combination to be removed.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2013-01-13 11:54:29 +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
0b893bb2aa uterm: vt: use current VT if it is unused
If we autoselect a VT and the current VT is unused, use it. This is
similar to the behavior of Weston and X-Server.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-06 14:44:14 +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
66fad90384 uterm: vt: fix opening new VTs
If no VT name is explicitly given, we need to use VT_OPENQRY to find one.
This used to work until we switched to supporting fake-VTs. Fix this again
to work like it used to.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-02 23:27:00 +01:00
David Herrmann
84a006777b uterm: vt: handle HUP on controlling TTY
If the controlling TTY (in our case the VT) signals us a HUP, we should
consider it closed and forward that to the caller. This does normally not
happen on real VTs, however, on fake-VTs this happens if the parent goes
away.

We forward the HUP to the controlling subsystem which then has to deal
with it. But more importantly, we disable the fd so we don't hog the CPU
by unconditionally flushing the queue.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-02 12:02:06 +01:00
David Herrmann
8e23d947f1 uterm: vt: add uterm_vt_get_type() helper
This helper returns the VT type. This will allow external users to see
whether we have real VTs or whether we don't.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-02 10:19:43 +01:00
David Herrmann
9bfd8c4f86 uterm: vt: set K_RAW before trying K_OFF
K_OFF is not available on older kernels and it is currently discussed
whether it should be replaced on newer kernels. Therefore, set K_RAW
before trying K_OFF and then ignore errors if K_OFF cannot be set.

Reported-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-02 10:18:15 +01:00
David Herrmann
53ad90da0f uterm: vt: use real VTs on all seats if available
If there is already a kmscon instance running that provides fake-VTs, then
lets use it. This allows stacking kmscon processes and is very useful for
debugging.

Also other applications that use uterm can now run inside of kmscon
without any other special configuration.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-12-01 15:25:37 +01:00
David Herrmann
71e497277d uterm: vt: fix input-device sleep-control
We need to correctly put input devices asleep only if we really disable
the VT. If our callbacks fail and prevent the VT-switch, we must keep the
input devices awake. Otherwise, we will lose control over the
sleep-states.

Also correctly put the device asleep during shutdown.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-11-19 15:57:35 +01:00
David Herrmann
6da6e2319a uterm: vt: implement delayed VT-switches
If we cannot immediately perform a VT switch away from our application, we
might want to retry this shortly after. Therefore, we can now call
uterm_vt_retry() which then performs any outstanding VT-switches.

To avoid unexpected behavior, we limit this to a 2-3 second delay.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-11-19 13:04:15 +01:00
David Herrmann
06eb8d71a7 uterm: vt: do nothing if VT-switch targets our VT
If the user presses some keys to switch VTs and the target VT is our VT
(which is already active in this case), we shouldn't do anything. Calling
VT_ACTIVATE doesn't particularly hurt, but it doesn't get us anything
here so skip it.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-11-19 13:01:57 +01:00
David Herrmann
e1687d5931 uterm: vt: do nothing if target-VT is already active during deactivation
If we deactivate our VT and the target-VT is already active (probably
because we opened the _current_ VT during uterm-vt creation), we shouldn't
do anything but simply close the VT.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-11-19 13:00:38 +01:00
David Herrmann
c7707560de uterm: vt: do not check SIGUSR1/2 for SI_KERNEL
If we want to run as client under user-space fake-VT implementations like
kmscon-cdev, we need to be able to catch those signals from
userspace-daemons. Therefore, do not check whether the signals were
generated by the kernel.

This doesn't affect security in any way as non-priviledged processes
aren't allowed to send signals, anyway. Moreover, this increases
debugability of VT layers a lot as we can fake these signals now.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-11-17 19:45:44 +01:00
David Herrmann
b27b3a9a16 uterm: vt: fix not overwriting 'ret' in error paths
We cannot use 'ret' in error paths, otherwise, we might return 0. This
might then cause instabilities as the objects weren't initialized
correctly.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-11-11 11:33:19 +01:00
David Herrmann
f96870fe90 uterm: vt: do not modify TTY settings
We do not use the TTY for anything except VT functions. Hence, there is no
need to modify the TTY settings before using it.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-11-10 18:11:16 +01:00
David Herrmann
a9b12b22ac uterm: vt: avoid blocking SIGUSR1/2 twice
eloop does already block signals that we register callbacks for so we do
not have to block it manually here.
Note that the signal-handlers are registered _before_ doing the backend
initialization so we also avoid the previously fixed race-condition.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-11-05 14:52:25 +01:00
David Herrmann
614fe3dc81 uterm: vt: keep graphics mode during VT switch
If we open a VT, we assume that we are the only user on it. Therefore, we
put it into graphics mode _once_ and keep it this way. Resetting it to
text mode is useless, as there is no other user and every VT has its own
modes.

This also fixes page-flip issues during VT-switches which caused the
text-mode fbdev layer to claim one vertical-sync for their own page-flip
only for us to override it immediately after it is done.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-11-05 14:47:38 +01:00
David Herrmann
8e837167c5 uterm: vt: add fake_open/close() helpers
Instead of doing the backend initialization directly in uterm_vt code, we
now use fake_* helpers similar to real_* helpers.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-11-05 14:45:22 +01:00
David Herrmann
e7c8e7b531 uterm: vt: allow VT-deactivation to fail
If we dispatch VT-deactivation to child-processes, we might allow them to
abort the VT-switch, so the upper layer (uterm_vt) must also allow us to
abort the VT-switch.
During shutdown, we need to force the deactivation to guarantee that a VT
is inactive during shutdown.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-11-05 14:18:41 +01:00
David Herrmann
c827720f48 uterm: vt: fix real VTs when opening the currently active VT
We always assumed that the currently active VT is never the VT we open.
However, this is not true so schedule a VT-activation if this happens.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-28 17:38:28 +01:00
David Herrmann
150f976b64 uterm: vt: put input devices asleep when inactive
There is no need to keep the input-devices around while another VT is
active.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-28 16:56:50 +01:00
David Herrmann
4a4ccec363 uterm: vt: fix race by blocking signals before setting them
We must block the signals before setting the signal handlers to avoid
retrieving them asynchronously.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-28 16:17:18 +01:00
David Herrmann
998a43455b uterm: vt: reset KBMODE to K_UNICODE if it was K_OFF
If we switch to a VT that has KBMODE set to K_OFF, we do not set it back
to K_OFF when leaving, instead, we set it to K_UNICODE. This allows
recovering when kmscon died by simply restarting kmscon.

There is really no need to let a VT stay in K_OFF! This causes the user to
be stuck at this VT and use the sysrq (if enabled) keys to recover.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-09 13:10:02 +02:00
David Herrmann
0a03785ffc uterm: input: add support for multiple keysyms
xkbcommon supports reporting multiple keysyms per key-event. There is no
keymap which uses this, yet. However, this feature is not meant to enhance
performance by reducing the number of calls into xkb, but instead multiple
keysyms are to be handled as one big keysym.
But there are no examples, yet, so we cannot actually perform any
conversions on them. But we can add the infrastructure for it.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-09 11:19:30 +02:00
David Herrmann
c9564108bd uterm: input: add flag to input-events marking them as handled
If multiple handlers are called on the same input-event, we must notify
handlers whether the event was already handled by a previous callback. We
push this decision to the handlers by allowing them to modify the
"handled" flag for an input event.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-08 17:52:00 +02:00
David Herrmann
b1e91d8f65 uterm: vt: handle VT switches without kernel input
We now set KBMODE to K_OFF so we are totally independent of kernel input.
Instead, we handle VT switches with uterm-input now. This also allows us
to have full control of which keyboard input is parsed by us and which is
parsed by the kernel.

We still need to set a flag for uterm-input events that they were handled
to avoid having the TSM layer handle these events again.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-08 16:57:02 +02:00
David Herrmann
32335abdc7 uterm: vt: register input-cb for all VTs
This modifies the generic VT layer to register input-cbs for all VT types
and dispatch the event to the correct handler.
This will allow us to handle VT-switches for real VTs ourself instead of
relying on VT input.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-08 16:40:26 +02:00
David Herrmann
470c643ce8 uterm: vt: remove fake-VT SIGUSR1/2 (de)activation
This whole concept was broken from the beginning. With hotkey based
activation we have a much better debugging tool. This is still very
fragile, but better than nothing. And we are doing pretty well in error
recovery during hijacked VT switches so that's not as problematic as one
might think.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-08 16:22:51 +02:00
David Herrmann
c44c262617 uterm: vt: add a lot more verbose error messages
This adds a lot more verbose error messages to the whole real-VT handling
so we can debug this fragile system way better than before.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-08 16:10:53 +02:00
David Herrmann
3b07517b13 uterm: vt: add helpers to (de)activate all VTs at once
Two new helpers to activate or deactivate all VTs at once. They return the
total count of VT switches that are pending or an error code.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-01 13:56:06 +02:00
David Herrmann
a24b2e5478 uterm: vt: fix skipping real_activate() when being inactive
This is probably a copy&paste error from real_deactivate(). We should skip
real_activate() if we are _active_, not if we are _inactive_.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-01 13:54:08 +02:00
David Herrmann
45c51695d9 uterm: vt: do not automatically activate fake-VTs
We used to activate fake-VTs directly after they were allocated. This is
not needed anymore as we can control them directly now.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-01 13:29:49 +02:00
David Herrmann
f672c98905 uterm: vt: add fake_activate() and fake_deactivate() hooks
This makes uterm_vt_(de)activate() forward the request to fake-VTs, too.
The fake-VTs directly forward it to the callbacks.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-01 13:26:51 +02:00
David Herrmann
79d2c47860 uterm: vt: return error in real_deactivate() if VT is dead
We used to return 0 if we don't know the VT id in real_deactivate().
However, the VT id is nowadays always known so we must return an error
instead.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-01 13:24:41 +02:00
David Herrmann
2c6a34deb9 uterm: vt: make real_activate() behave like real_deactivate()
real_activate() has alsmost the same semantics as real_deactivate() so we
should also return -EINPROGRESS when we scheduled the VT switch. This
isn't used by kmscon currently, but may be used by other uterm users.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-01 13:23:38 +02:00
David Herrmann
79ef4f9505 Move grab-parsing into conf.c
We really need to clean this up and allow parsing of grabs in conf.c
again. xkbcommon is now mandatory so we can fix all the input layers to
use it.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-01 11:23:21 +02:00
David Herrmann
c43d1ca722 kmscon: allow paths with --vt=<xy>
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>
2012-09-30 19:13:02 +02:00
David Herrmann
bf18799015 kmscon: add --vt=<num> option to select VT for seat0
VTs are only available on seat0 so this option does not affect other
seats. On seat0 it selects the VT that we run on. We do _not_ fall back to
another seat if it fails but disable this seat instead.

Reported-by: Matthew Monaco
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-09-29 11:49:54 +02:00
David Herrmann
69259c8d64 build: make xkbcommon built-time dependency
We really need xkbcommon-keysyms.h for building kmscon/uterm/TSM/etc.
However, the recent fix was ugly and didn't really help. Instead we copy
the keysyms file into external/xkbcommon/ so we can just include the real
xkbcommon files from any source but have a fallback in external/.

Hence, you can still build kmscon without xkbcommon with this fallback,
but this will be removed the first day when xkbcommon sees a public
release.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-09-18 12:29:06 +02:00
David Herrmann
93c553c1bc shl: move timer to shl_timer_*
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>
2012-09-16 17:08:21 +02:00
David Herrmann
aed1373bc6 shl: move dlist to shl_dlist.h
Instead of including dlist in the static library, we now move it to SHL.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-09-15 20:11:00 +02:00
David Herrmann
715e247676 shl: move dlist implementation to shl_dlist_*
Shl (Static helper library) is the new name of all static helpers in
kmscon that might be shared between different applications.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-09-15 19:10:37 +02:00
David Herrmann
55e37dde77 uterm: add uterm_keysyms.h
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>
2012-09-11 19:30:26 +02:00
David Herrmann
7f2d9dc4ff uterm: move uterm_internal.h to uterm_input.h
uterm_internal.h contains only input related content so we can rename it
and remove all the inclusions where it is not needed.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-09-11 19:16:54 +02:00
David Herrmann
5d7bdd3584 uterm: vt: be more verbose on errors
Print more information when VT allocation fails.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-09-08 15:36:02 +02:00