stefanhusmann schrieb
- X ist jetzt "rootless", d.h. durch die Verwendung von systemd-logind gibt es kein explizites Fenster mehr, dass alle anderen enthält. Dies bringt mit sich, dass X jetzt aus derselben virtuellen Konsole heraus gestartet werden muss, aus der gebootet wurde. Auch ein Umbiegen von stderr ist nicht mehr ohne Weiteres möglich. Das alte Verhalten kann durch Anlegen einer Datei Xorg.wrap wiedererlangen. Näheres in der Manpage (man xorg.wrap). Startet man X über einen Login-Manager, gilt dies nicht.
Nein.
1. "rootless" bedeutet, dass der X Server ohne root Rechte läuft, wie in top auch wunderbar zu sehen ist:
7053 lycan 19 -1 384432 36028 25240 S 0.3 0.2 0:01.09 Xorg.bin
Ein Root Window ist nach wie vor vorhanden. Bei mir hat es die ID 156. Das kann man mit dem Programm am Ende dieses Posts heraus finden.
(Auch Xwayland und Xming haben ein Root Window, es ist nur nicht sichtbar.)
2. Xorg.wrap ist keine Konfigurationsdatei, die man anlegen kann, sodern ein Wrapper, der automatisch feststellt, ob der X Server root Rechte benötigt oder nicht. Root Rechte mann man mit dem Eintrag "needs_root_rights = yes" in der /etc/X11/Xwrapper.config erzwingen.
stefanhusmann schrieb
- Viele Konfiurationsdateien findet man nun unter /usr/share/X11/xorg.conf.d
Das sind die Default Konfigurationsdateien. wenn man sie ändern möchte, kopiert man sie zu ihrem gewohnten Platz nach /etc/x11/xorg.conf.d.
Da war wohl jemand gestern abend nicht ganz wach? 😉
Anhang:
// Compile with: g++ test.cpp -O2 -lxcb -lX11 -lX11-xcb
#include <iostream>
#include <stdexcept>
#include <X11/Xlib-xcb.h>
int main(int argc, char *argv[])
{
Display *display = XOpenDisplay(0);
if(!display) throw std::runtime_error("XOpenDisplay");
XSetEventQueueOwner(display, XCBOwnsEventQueue);
xcb_connection_t *connection = XGetXCBConnection(display);
if(!connection) throw std::runtime_error("XGetXCBConnection");
int default_screen = DefaultScreen(display);
xcb_screen_iterator_t iter =
xcb_setup_roots_iterator(xcb_get_setup(connection));
for(int c = 0; c < default_screen; c++)
xcb_screen_next(&iter);
xcb_screen_t *screen = iter.data;
std::cout << "Root Window ID: " << screen->root << std::endl;
XCloseDisplay(display);
return 0;
}