mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-06-19 07:48:27 +02:00
xfree86: always force RAW mode under linux.
The previous check for AEI on left us with the possibility that AEI is forced
off in the config, but devices are added through evdev nonetheless. A keyboard
added this way can CTRL+C the server. Even when we use kbd, we can set the
mode to RAW, so it's safer alround to to so.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit b339052340)
Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
3284b03dca
commit
0c9db0ea10
1 changed files with 22 additions and 32 deletions
|
|
@ -250,6 +250,8 @@ xf86OpenConsole(void)
|
|||
|
||||
if (!ShareVTs)
|
||||
{
|
||||
struct termios nTty;
|
||||
|
||||
#if defined(DO_OS_FONTRESTORE)
|
||||
lnx_savefont();
|
||||
#endif
|
||||
|
|
@ -282,37 +284,27 @@ xf86OpenConsole(void)
|
|||
FatalError("xf86OpenConsole: KDSETMODE KD_GRAPHICS failed %s\n",
|
||||
strerror(errno));
|
||||
|
||||
/* Set the keyboard to RAW mode. If we're using the keyboard
|
||||
* driver, the driver does it for us. If we have AEI on, then
|
||||
* we're expecting the devices to be added (i.e. evdev) and we
|
||||
* have to set it manually.
|
||||
*/
|
||||
if (xf86Info.allowEmptyInput)
|
||||
{
|
||||
struct termios nTty;
|
||||
tcgetattr(xf86Info.consoleFd, &tty_attr);
|
||||
ioctl(xf86Info.consoleFd, KDGKBMODE, &tty_mode);
|
||||
|
||||
tcgetattr(xf86Info.consoleFd, &tty_attr);
|
||||
ioctl(xf86Info.consoleFd, KDGKBMODE, &tty_mode);
|
||||
if (ioctl(xf86Info.consoleFd, KDSKBMODE, K_RAW) < 0)
|
||||
FatalError("xf86OpenConsole: KDSKBMODE K_RAW failed %s\n",
|
||||
strerror(errno));
|
||||
|
||||
if (ioctl(xf86Info.consoleFd, KDSKBMODE, K_RAW) < 0)
|
||||
FatalError("xf86OpenConsole: KDSKBMODE K_RAW failed %s\n",
|
||||
strerror(errno));
|
||||
nTty = tty_attr;
|
||||
nTty.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP);
|
||||
nTty.c_oflag = 0;
|
||||
nTty.c_cflag = CREAD | CS8;
|
||||
nTty.c_lflag = 0;
|
||||
nTty.c_cc[VTIME]=0;
|
||||
nTty.c_cc[VMIN]=1;
|
||||
cfsetispeed(&nTty, 9600);
|
||||
cfsetospeed(&nTty, 9600);
|
||||
tcsetattr(xf86Info.consoleFd, TCSANOW, &nTty);
|
||||
|
||||
nTty = tty_attr;
|
||||
nTty.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP);
|
||||
nTty.c_oflag = 0;
|
||||
nTty.c_cflag = CREAD | CS8;
|
||||
nTty.c_lflag = 0;
|
||||
nTty.c_cc[VTIME]=0;
|
||||
nTty.c_cc[VMIN]=1;
|
||||
cfsetispeed(&nTty, 9600);
|
||||
cfsetospeed(&nTty, 9600);
|
||||
tcsetattr(xf86Info.consoleFd, TCSANOW, &nTty);
|
||||
|
||||
/* need to keep the buffer clean, else the kernel gets angry */
|
||||
console_handler = xf86AddGeneralHandler(xf86Info.consoleFd,
|
||||
drain_console, NULL);
|
||||
}
|
||||
/* need to keep the buffer clean, else the kernel gets angry */
|
||||
console_handler = xf86AddGeneralHandler(xf86Info.consoleFd,
|
||||
drain_console, NULL);
|
||||
|
||||
/* we really should have a InitOSInputDevices() function instead
|
||||
* of Init?$#*&Device(). So I just place it here */
|
||||
|
|
@ -376,10 +368,8 @@ xf86CloseConsole()
|
|||
xf86Msg(X_WARNING, "xf86CloseConsole: KDSETMODE failed: %s\n",
|
||||
strerror(errno));
|
||||
|
||||
if (xf86Info.allowEmptyInput) {
|
||||
ioctl(xf86Info.consoleFd, KDSKBMODE, tty_mode);
|
||||
tcsetattr(xf86Info.consoleFd, TCSANOW, &tty_attr);
|
||||
}
|
||||
ioctl(xf86Info.consoleFd, KDSKBMODE, tty_mode);
|
||||
tcsetattr(xf86Info.consoleFd, TCSANOW, &tty_attr);
|
||||
|
||||
if (ioctl(xf86Info.consoleFd, VT_GETMODE, &VT) < 0)
|
||||
xf86Msg(X_WARNING, "xf86CloseConsole: VT_GETMODE failed: %s\n",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue