feat(x11): migrate to pure Xlibre + dwm/dmenu/st stack, fix fcitx5-t9 bottom bar, PM8909 PON shutdown, and remove Wayland

This commit is contained in:
Luxferre
2026-10-20 21:15:16 +03:00
parent ad012360c3
commit 7bab7b7a11
422 changed files with 63226 additions and 2342 deletions
@@ -0,0 +1,237 @@
diff --git a/Xext/xfixes/cursor.c b/Xext/xfixes/cursor.c
index d017da0..a530caa 100644
--- a/Xext/xfixes/cursor.c
+++ b/Xext/xfixes/cursor.c
@@ -122,9 +122,9 @@ typedef struct _CursorHideCountRec {
#define Wrap(as,s,elt,func) (((as)->elt = (s)->elt), (s)->elt = (func))
#define Unwrap(as,s,elt,backup) (((backup) = (s)->elt), (s)->elt = (as)->elt)
-/* The cursor doesn't show up until the first XDefineCursor() */
+/* The cursor is permanently disabled for keypad-only hardware */
Bool CursorVisible = FALSE;
-Bool EnableCursor = TRUE;
+Bool EnableCursor = FALSE;
static CursorPtr
CursorForDevice(DeviceIntPtr pDev)
diff --git a/hw/xfree86/drivers/video/modesetting/drmmode_bo.c b/hw/xfree86/drivers/video/modesetting/drmmode_bo.c
index b39aa73..71c876e 100644
--- a/hw/xfree86/drivers/video/modesetting/drmmode_bo.c
+++ b/hw/xfree86/drivers/video/modesetting/drmmode_bo.c
@@ -251,6 +251,8 @@ gbm_create_cursor_bo(drmmode_ptr drmmode, Bool do_map,
/* For older mesa */
GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE,
+ GBM_BO_USE_SCANOUT | GBM_BO_USE_WRITE,
+ GBM_BO_USE_WRITE,
};
/* Assume whatever bpp we have for the primary plane, we also have for the cursor plane */
diff --git a/hw/xfree86/drivers/video/modesetting/drmmode_display.c b/hw/xfree86/drivers/video/modesetting/drmmode_display.c
index e5f694c..98f1f7a 100644
--- a/hw/xfree86/drivers/video/modesetting/drmmode_display.c
+++ b/hw/xfree86/drivers/video/modesetting/drmmode_display.c
@@ -4856,16 +4856,11 @@ drmmode_create_initial_bos(ScrnInfoPtr pScrn, drmmode_ptr drmmode)
min_width = MIN(width, min_width);
min_height = MIN(height, min_height);
- drmmode_crtc->cursor.bo = gbm_create_best_bo(drmmode, TRUE, width, height, DRMMODE_CURSOR_BO);
- if (!drmmode_crtc->cursor.bo) {
- gbm_bo_destroy(drmmode->front_bo);
- for (int j = 0; j < i; j++) {
- xf86CrtcPtr free_crtc = xf86_config->crtc[j];
- drmmode_crtc_private_ptr free_drmmode_crtc = free_crtc->driver_private;
- gbm_bo_destroy(free_drmmode_crtc->cursor.bo);
- free_drmmode_crtc->cursor.bo = NULL;
+ if (!drmmode->sw_cursor) {
+ drmmode_crtc->cursor.bo = gbm_create_best_bo(drmmode, TRUE, width, height, DRMMODE_CURSOR_BO);
+ if (!drmmode_crtc->cursor.bo) {
+ drmmode->sw_cursor = TRUE;
}
- return FALSE;
}
}
@@ -4886,13 +4881,15 @@ drmmode_free_bos(ScrnInfoPtr pScrn, drmmode_ptr drmmode)
drmmode->fb_id = 0;
}
- gbm_bo_destroy(drmmode->front_bo);
+ if (drmmode->front_bo)
+ gbm_bo_destroy(drmmode->front_bo);
for (i = 0; i < xf86_config->num_crtc; i++) {
xf86CrtcPtr crtc = xf86_config->crtc[i];
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
- gbm_bo_destroy(drmmode_crtc->cursor.bo);
+ if (drmmode_crtc->cursor.bo)
+ gbm_bo_destroy(drmmode_crtc->cursor.bo);
drmmode_destroy_tearfree_shadow(crtc);
}
}
diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c
index 6653dd9..e04b69c 100644
--- a/hw/xfree86/os-support/linux/lnx_init.c
+++ b/hw/xfree86/os-support/linux/lnx_init.c
@@ -114,35 +114,41 @@ linux_parse_vt_settings(int may_fail)
if (fd < 0) {
if (may_fail)
return 0;
- FatalError("parse_vt_settings: Cannot open /dev/tty0 (%s), maybe missing for ex. '-seat seat0 -keeptty' parameters? (in case trying to run uid !=0 mode)\n",
- strerror(errno));
- }
-
- if (xf86Info.ShareVTs) {
- SYSCALL(ret = ioctl(fd, VT_GETSTATE, &vts));
- if (ret < 0) {
- if (may_fail)
- return 0;
- FatalError("parse_vt_settings: Cannot find the current"
- " VT (%s)\n", strerror(errno));
- }
- xf86Info.vtno = vts.v_active;
- }
- else {
- SYSCALL(ret = ioctl(fd, VT_OPENQRY, &xf86Info.vtno));
- if (ret < 0) {
- if (may_fail)
- return 0;
- FatalError("parse_vt_settings: Cannot find a free VT: "
- "%s\n", strerror(errno));
+ xf86Info.vtno = 1;
+ KeepTty = TRUE;
+ } else {
+ if (xf86Info.ShareVTs) {
+ SYSCALL(ret = ioctl(fd, VT_GETSTATE, &vts));
+ if (ret < 0) {
+ if (may_fail) {
+ close(fd);
+ return 0;
+ }
+ FatalError("parse_vt_settings: Cannot find the current"
+ " VT (%s)\n", strerror(errno));
+ }
+ xf86Info.vtno = vts.v_active;
}
- if (xf86Info.vtno == -1) {
- if (may_fail)
- return 0;
- FatalError("parse_vt_settings: Cannot find a free VT\n");
+ else {
+ SYSCALL(ret = ioctl(fd, VT_OPENQRY, &xf86Info.vtno));
+ if (ret < 0) {
+ if (may_fail) {
+ close(fd);
+ return 0;
+ }
+ FatalError("parse_vt_settings: Cannot find a free VT: "
+ "%s\n", strerror(errno));
+ }
+ if (xf86Info.vtno == -1) {
+ if (may_fail) {
+ close(fd);
+ return 0;
+ }
+ FatalError("parse_vt_settings: Cannot find a free VT\n");
+ }
}
+ close(fd);
}
- close(fd);
}
LogMessageVerb(from, 1, "using VT number %d\n\n", xf86Info.vtno);
@@ -218,9 +224,14 @@ xf86OpenConsole(void)
if (seatd_libseat_controls_session())
return;
- if (xf86Info.consoleFd < 0)
- FatalError("xf86OpenConsole: Cannot open virtual console"
- " %d (%s)\n", xf86Info.vtno, strerror(errno));
+ if (xf86Info.consoleFd < 0) {
+ LogMessageVerb(X_WARNING, 1,
+ "xf86OpenConsole: Cannot open virtual console %d (%s), using /dev/null in shared VT mode\n",
+ xf86Info.vtno, strerror(errno));
+ xf86Info.consoleFd = open("/dev/null", O_RDWR | O_NDELAY, 0);
+ xf86Info.ShareVTs = TRUE;
+ return;
+ }
/*
* Linux doesn't switch to an active vt after the last close of a vt,
@@ -237,15 +248,23 @@ xf86OpenConsole(void)
struct termios nTty;
/*
- * now get the VT. This _must_ succeed, or else fail completely.
+ * now get the VT. If unprivileged without CAP_SYS_TTY_CONFIG,
+ * fall back to ShareVTs mode instead of aborting.
*/
- if (!switch_to(xf86Info.vtno, "xf86OpenConsole"))
- FatalError("xf86OpenConsole: Switching VT failed\n");
+ if (!switch_to(xf86Info.vtno, "xf86OpenConsole")) {
+ LogMessageVerb(X_WARNING, 1,
+ "xf86OpenConsole: VT switch not permitted, continuing in shared VT mode\n");
+ xf86Info.ShareVTs = TRUE;
+ return;
+ }
SYSCALL(ret = ioctl(xf86Info.consoleFd, VT_GETMODE, &VT));
- if (ret < 0)
- FatalError("xf86OpenConsole: VT_GETMODE failed %s\n",
- strerror(errno));
+ if (ret < 0) {
+ LogMessageVerb(X_WARNING, 1, "xf86OpenConsole: VT_GETMODE failed %s\n",
+ strerror(errno));
+ xf86Info.ShareVTs = TRUE;
+ return;
+ }
OsSignal(SIGUSR1, xf86VTRequest);
@@ -254,15 +273,20 @@ xf86OpenConsole(void)
VT.acqsig = SIGUSR1;
SYSCALL(ret = ioctl(xf86Info.consoleFd, VT_SETMODE, &VT));
- if (ret < 0)
- FatalError
- ("xf86OpenConsole: VT_SETMODE VT_PROCESS failed: %s\n",
- strerror(errno));
+ if (ret < 0) {
+ LogMessageVerb(X_WARNING, 1,
+ "xf86OpenConsole: VT_SETMODE VT_PROCESS failed: %s\n",
+ strerror(errno));
+ xf86Info.ShareVTs = TRUE;
+ return;
+ }
SYSCALL(ret = ioctl(xf86Info.consoleFd, KDSETMODE, KD_GRAPHICS));
- if (ret < 0)
- FatalError("xf86OpenConsole: KDSETMODE KD_GRAPHICS failed %s\n",
- strerror(errno));
+ if (ret < 0) {
+ LogMessageVerb(X_WARNING, 1,
+ "xf86OpenConsole: KDSETMODE KD_GRAPHICS failed %s\n",
+ strerror(errno));
+ }
tcgetattr(xf86Info.consoleFd, &tty_attr);
SYSCALL(ioctl(xf86Info.consoleFd, KDGKBMODE, &tty_mode));
@@ -274,11 +298,11 @@ xf86OpenConsole(void)
/* fine, just disable special keys */
SYSCALL(ret = ioctl(xf86Info.consoleFd, KDSKBMODE, K_RAW));
if (ret < 0)
- FatalError("xf86OpenConsole: KDSKBMODE K_RAW failed %s\n",
- strerror(errno));
-
- /* ... and drain events, else the kernel gets angry */
- xf86SetConsoleHandler(drain_console, NULL);
+ LogMessageVerb(X_WARNING, 1,
+ "xf86OpenConsole: KDSKBMODE K_RAW failed %s\n",
+ strerror(errno));
+ else
+ xf86SetConsoleHandler(drain_console, NULL);
}
nTty = tty_attr;
@@ -0,0 +1,25 @@
diff --git a/src/xf86libinput.c b/src/xf86libinput.c
index 1aebca3..8d3691c 100644
--- a/src/xf86libinput.c
+++ b/src/xf86libinput.c
@@ -1727,12 +1727,19 @@ xf86libinput_handle_key(InputInfoPtr pInfo, struct libinput_event_keyboard *even
if ((driver_data->capabilities & CAP_KEYBOARD) == 0)
return;
- /* keycodes > 256 that have a historical mapping in xkeyboard-config */
+ /* keycodes > 256 that have a historical mapping in xkeyboard-config
+ * plus Nokia MSM8909 keypad evdev keycodes > 247 mapped into X11 8-bit range */
switch (key) {
case KEY_TOUCHPAD_TOGGLE: key = KEY_F21; break;
case KEY_TOUCHPAD_ON: key = KEY_F22; break;
case KEY_TOUCHPAD_OFF: key = KEY_F23; break;
case KEY_MICMUTE: key = KEY_F20; break;
+ case 696: /* KEY_KBD_LCD_MENU1 (Left Softkey) */ key = KEY_COMPOSE; break;
+ case 697: /* KEY_KBD_LCD_MENU2 (Right Softkey) */ key = KEY_BACK; break;
+ case 445: /* KEY_PICKUP_PHONE (Call button) */ key = KEY_PHONE; break;
+ case 352: /* KEY_OK (Center D-pad OK) */ key = KEY_ENTER; break;
+ case 522: /* KEY_NUMERIC_STAR (*) */ key = KEY_KPASTERISK; break;
+ case 523: /* KEY_NUMERIC_POUND (#) */ key = KEY_KPSLASH; break;
}
key += XORG_KEYCODE_OFFSET;
@@ -0,0 +1,65 @@
diff --git a/src/fbdev.c b/src/fbdev.c
index 3dfc0b2..6e3b9e7 100644
--- a/src/fbdev.c
+++ b/src/fbdev.c
@@ -15,14 +15,18 @@
#include "colormapst.h"
#include "xf86cmap.h"
#include "shadow.h"
+#ifdef XFreeXDGA
#include "dgaproc.h"
+#endif
/* for visuals */
#include "fb.h"
#include "fbdevhw.h"
+#ifdef XV
#include "xf86xv.h"
+#endif
#include <pciaccess.h>
@@ -168,9 +172,11 @@ typedef struct {
CreateScreenResourcesProcPtr CreateScreenResources;
void (*PointerMoved)(ScrnInfoPtr pScrn, int x, int y);
EntityInfoPtr pEnt;
+#ifdef XFreeXDGA
/* DGA info */
DGAModePtr pDGAMode;
int nDGAMode;
+#endif
OptionInfoPtr Options;
} FBDevRec, *FBDevPtr;
@@ -954,11 +960,13 @@ FBDevCloseScreen(ScreenPtr pScreen)
free(fPtr->shadow);
fPtr->shadow = NULL;
}
+#ifdef XFreeXDGA
if (fPtr->pDGAMode) {
free(fPtr->pDGAMode);
fPtr->pDGAMode = NULL;
fPtr->nDGAMode = 0;
}
+#endif
pScrn->vtSema = FALSE;
pScreen->CreateScreenResources = fPtr->CreateScreenResources;
@@ -1031,6 +1039,7 @@ FBDevPointerMoved(ScrnInfoPtr pScrn, int x, int y)
/***********************************************************************
* DGA stuff
***********************************************************************/
+#ifdef XFreeXDGA
static Bool FBDevDGAOpenFramebuffer(ScrnInfoPtr pScrn, char **DeviceName,
unsigned char **ApertureBase,
int *ApertureSize, int *ApertureOffset,
@@ -1154,6 +1163,7 @@ FBDevDGAAddModes(ScrnInfoPtr pScrn)
pMode = pMode->next;
} while (pMode != pScrn->modes);
}
+#endif
static Bool
FBDevDGAInit(ScrnInfoPtr pScrn, ScreenPtr pScreen)