6105683da3
This allows to receive mouse and keyboard events from a Barrier server. This is enabled by adding the following parameter on the command line ... -object input-barrier,id=$id,name=$name ... Where $name is the name declared in the screens section of barrier.conf The barrier server (barriers) must be configured and must run on the local host. For instance: section: screens localhost: ... VM-1: ... end section: links localhost: right = VM-1 VM-1: left = localhost end Then on the QEMU command line: ... -object input-barrier,id=barrie0,name=VM-1 ... When the mouse will move out of the screen of the local host on the right, the mouse and the keyboard will be grabbed and all related events will be send to the guest OS. This is usefull when qemu is configured without emulated graphic card but with a VFIO attached graphic card. More information about Barrier can be found at: https://github.com/debauchee/barrier This avoids to install the Barrier server in the guest OS, for instance when it is not supported or during the installation. Signed-off-by: Laurent Vivier <laurent@vivier.eu> Message-id: 20190906083812.29487-1-laurent@vivier.eu Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
113 lines
2.1 KiB
C
113 lines
2.1 KiB
C
/*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
* See the COPYING file in the top-level directory.
|
|
*/
|
|
|
|
#ifndef UI_INPUT_BARRIER_H
|
|
#define UI_INPUT_BARRIER_H
|
|
|
|
/* Barrier protocol */
|
|
#define BARRIER_VERSION_MAJOR 1
|
|
#define BARRIER_VERSION_MINOR 6
|
|
|
|
enum barrierCmd {
|
|
barrierCmdCNoop,
|
|
barrierCmdCClose,
|
|
barrierCmdCEnter,
|
|
barrierCmdCLeave,
|
|
barrierCmdCClipboard,
|
|
barrierCmdCScreenSaver,
|
|
barrierCmdCResetOptions,
|
|
barrierCmdCInfoAck,
|
|
barrierCmdCKeepAlive,
|
|
barrierCmdDKeyDown,
|
|
barrierCmdDKeyRepeat,
|
|
barrierCmdDKeyUp,
|
|
barrierCmdDMouseDown,
|
|
barrierCmdDMouseUp,
|
|
barrierCmdDMouseMove,
|
|
barrierCmdDMouseRelMove,
|
|
barrierCmdDMouseWheel,
|
|
barrierCmdDClipboard,
|
|
barrierCmdDInfo,
|
|
barrierCmdDSetOptions,
|
|
barrierCmdDFileTransfer,
|
|
barrierCmdDDragInfo,
|
|
barrierCmdQInfo,
|
|
barrierCmdEIncompatible,
|
|
barrierCmdEBusy,
|
|
barrierCmdEUnknown,
|
|
barrierCmdEBad,
|
|
/* connection sequence */
|
|
barrierCmdHello,
|
|
barrierCmdHelloBack,
|
|
};
|
|
|
|
enum {
|
|
barrierButtonNone,
|
|
barrierButtonLeft,
|
|
barrierButtonMiddle,
|
|
barrierButtonRight,
|
|
barrierButtonExtra0
|
|
};
|
|
|
|
struct barrierVersion {
|
|
int16_t major;
|
|
int16_t minor;
|
|
};
|
|
|
|
struct barrierMouseButton {
|
|
int8_t buttonid;
|
|
};
|
|
|
|
struct barrierEnter {
|
|
int16_t x;
|
|
int16_t y;
|
|
int32_t seqn;
|
|
int16_t modifier;
|
|
};
|
|
|
|
struct barrierMousePos {
|
|
int16_t x;
|
|
int16_t y;
|
|
};
|
|
|
|
struct barrierKey {
|
|
int16_t keyid;
|
|
int16_t modifier;
|
|
int16_t button;
|
|
};
|
|
|
|
struct barrierRepeat {
|
|
int16_t keyid;
|
|
int16_t modifier;
|
|
int16_t repeat;
|
|
int16_t button;
|
|
};
|
|
|
|
#define BARRIER_MAX_OPTIONS 32
|
|
struct barrierSet {
|
|
int nb;
|
|
struct {
|
|
int id;
|
|
char nul;
|
|
int value;
|
|
} option[BARRIER_MAX_OPTIONS];
|
|
};
|
|
|
|
struct barrierMsg {
|
|
enum barrierCmd cmd;
|
|
union {
|
|
struct barrierVersion version;
|
|
struct barrierMouseButton mousebutton;
|
|
struct barrierMousePos mousepos;
|
|
struct barrierEnter enter;
|
|
struct barrierKey key;
|
|
struct barrierRepeat repeat;
|
|
struct barrierSet set;
|
|
};
|
|
};
|
|
#endif
|