Linux – Arranque de Motif Windows Manager (mwm) en Centos7

por | 2 febrero, 2016

Es un sistema Centos 7 no basta sustituir un service de systemd que arranca gdm por otro que ejecute mwm.

Lo que no funciona

En un sistema con gnome, el default.target establece un enlace con graphical.target el cual llama al servicio display-manager.service el cual no es más que un enlace a gdm.service.

Desde gdm.service se lanza /usr/sbin/gdm:

[Unit]
Description=GNOME Display Manager
Conflicts=getty@tty1.service plymouth-quit.service
After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service

[Service]
ExecStart=/usr/sbin/gdm
ExecStartPost=-/bin/bash -c "TERM=linux /usr/bin/clear > /dev/tty1"
ExecStop=-/bin/bash -c "TERM=linux /usr/bin/clear > /dev/tty1"
KillMode=process
Restart=always
IgnoreSIGPIPE=no
BusName=org.gnome.DisplayManager
StandardOutput=syslog
StandardError=inherit

[Install]
Alias=display-manager.service

Podemos pensar en crear un servicio llamado mwm.service  similar a éste, y sustituir ExecStart=/usr/sbin/gdm por ExecStart=/usr/sbin/mwm. Deshabilitaríamos gdm y habilitaríamos mwm:

[root@localhost xinit]# systemctl disable gdm.service
rm ‘/etc/systemd/system/display-manager.service’
[root@localhost xinit]# systemctl enable mwm.service
ln -s ‘/usr/lib/systemd/system/mwm.service’ ‘/etc/systemd/system/display-manager.service’
[root@localhost xinit]#

Pero esto no funcionará. mwm es un script que necesita más cosas para poder levantar un entorno X correctamente. Si embargo el binario gdm es la puerta que desencadena los procesos necesarios para un entorno X.

Lo que sí funciona

Pasando a modo texto e iniciando las X con startx vemos que sí se inicia el gestor de ventanas mwm (siempre que hayamos puesto antes PREFERRED=/usr/bin/mwm en el archivo /etc/X11/xinit/Xclients).

Una manera de hacer que arranque automáticamente como root en el inicio, es realizar un autologin (startx necesita hacerse desde una sesión de usuario) e incluir el arranque de startx desde el bashrc del root.

Deshabilitamos gdm:

# systemctl disable gdm.service
rm ‘/etc/systemd/system/display-manager.service’
#

Editamos el servicio /usr/lib/systemd/system/getty@.service y añadimos la opción –autologin root en el ExecStart:

ExecStart=-/sbin/agetty –autologin root –noclear %I $TERM

Finalmente incluimos:

[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx

en el bashrc del root.

Algo más elegante por favor

La solución anterior funciona, pero arrancar las X desde el bashrc del root…es un poco feo.

Hacemos que el equipo arranque en modo texto:

# systemctl set-default multi-user.target

Creamos un nuevo servicio en /etc/systemd/system que llamaremos startx.service con el siguiente contenido:

[Unit]
Description=X server from starx script
After=systemd-user-sessions.service

[Service]
ExecStart=/bin/su root -l -c /usr/bin/startx -- VT01

[Install]
WantedBy=multi-user.target

Habilitar el servicio:

# systemctl enable startx.service
ln -s ‘/etc/systemd/system/startx.service’ ‘/etc/systemd/system/multi-user.target.wants/startx.service’
#

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *