Instalando escritorio MATE en OpenBSD

2022/05/20

Notas para la instalación y configuración del escritorio MATE en OpenBSD:

  1. Instalar los paquetes mate y mate-extras:

    $ doas pkg_add mate mate-extras
    
  2. Seguir las indicaciones del paquete mate que se encuentran en el archivo /usr/local/share/doc/pkg-readmes/mate:

    1. Agregar mate-session en ~/.xsession:

      exec /usr/local/bin/ck-launch-session /usr/local/bin/mate-session
      
    2. Habilitar messagebus para ver el indicador de la conexión AC/batería:

      $ doas rcctl enable messagebus
      $ doas rcctl start messagebus
      
  3. Configuración de bloqueo al cerrar la tapa.

    Por defecto, al cerrar la tapa del laptop el equipo entra en suspensión y no se bloquea la pantalla, por lo que al volver a levantar la tapa y encender el equipo volvemos al escritorio y no está bloqueado. Esto es un problema de seguridad. Buscando en internet se encuentra la solución en el post Automatically lock screen on OpenBSD using xidle and xlock, la cual adaptandola queda como:

    1. Configurar el uso de xidle en ~/.xsession agregando antes del final del archivo la linea:

      xidle -delay 5 -nw -program "/usr/local/bin/mate-screensaver-command -l" -timeout 0 &
      

      que ejecuta el programa mate-screensaver-command para nunca bloquear la pantalla.

      En la documenentación de xidle no se indica que el parámetro de -timeout debe ser positivo. Entendiendo que con el valor 0 no se activa nunca, evitamos tener un conflicto entre el timeout dado por xidle y la configuración del salvapantallas de mate configurada por la UI.

    2. Crear script /etc/apm/suspend de apmd para que al suspenderse el equipo se envíe una señal al programa xidle:

      $ doas mkdir /etc/apm
      $ cat <<'END' | doas tee /etc/apm/suspend
      #!/bin/sh
      
      pkill -USR1 xidle
      END
      $ doas chmod +x /etc/apm/suspend
      
    3. Habilitar apmd:

      $ doas rcctl enable apmd
      $ doas rcctl start apmd
      
  4. Agregar indicador de mayusculas presionadas en barra de tareas y quitar íconos de escritorio.

    Esto en debian se realiza con el paquete mate-tweak, pero en openbsd no existe aún ese paquete, por lo que hay que modificar los settings utilizando dconf.

    Para obtener los valores a modificar utilizando dconf se puede inspeccionar el código fuente de mate-tweak y también los archivos en /usr/local/share/glib-2.0/schemas/:

    • https://github.com/ubuntu-mate/mate-tweak/blob/22.04.8/mate-tweak#L522:

      self.set_bool('org.mate.peripherals-keyboard-xkb.general', None, 'duplicate-leds', self.keyboard_led_enabled)
      

      Buscando el significado de la propiedad se confirma que es lo que estamos buscando:

      $ grep -h -A4 duplicate-leds /usr/local/share/glib-2.0/schemas/org.mate.*
      <key name="duplicate-leds" type="b">
        <default>false</default>
        <summary>Show keyboard leds indicator</summary>
        <description>Show keyboard leds indicator</description>
      </key>
      
    • https://github.com/ubuntu-mate/mate-tweak/blob/22.04.8/mate-tweak#L1631-L1636:

      self.init_checkbox("org.mate.background", "show-desktop-icons", "checkbox_show_icons")
      self.init_checkbox("org.mate.caja.desktop", "computer-icon-visible", "checkbox_computer")
      self.init_checkbox("org.mate.caja.desktop", "home-icon-visible", "checkbox_home")
      self.init_checkbox("org.mate.caja.desktop", "network-icon-visible", "checkbox_network")
      self.init_checkbox("org.mate.caja.desktop", "trash-icon-visible", "checkbox_trash")
      self.init_checkbox("org.mate.caja.desktop", "volumes-visible", "checkbox_volumes")
      

      Volvemos a buscar el significado de las propiedades anteriores:

      $ grep -h -A4 \
          -e show-desktop-icons \
          -e computer-icon-visible \
          -e home-icon-visible \
          -e trash-icon-visible \
          /usr/local/share/glib-2.0/schemas/org.mate.*
          <key name="show-desktop-icons" type="b">
            <default>true</default>
            <summary>Show Desktop Icons</summary>
            <description>Have MATE file manager (Caja) draw the desktop icons.</description>
          </key>
      --
          <key name="home-icon-visible" type="b">
            <default>true</default>
            <summary>Home icon visible on desktop</summary>
            <description>If this is set to true, an icon linking to the home folder will be put on the desktop.</description>
          </key>
          <key name="computer-icon-visible" type="b">
            <default>true</default>
            <summary>Computer icon visible on desktop</summary>
            <description>If this is set to true, an icon linking to the computer location will be put on the desktop.</description>
          </key>
          <key name="trash-icon-visible" type="b">
            <default>true</default>
            <summary>Trash icon visible on desktop</summary>
            <description>If this is set to true, an icon linking to the trash will be put on the desktop.</description>
          </key>
      

    Ahora, el problema que hay que tener en cuenta es que en el código fuente se indica el id del esquema y dconf utiliza el path del esquema.

    Para obtener los path a partir de los id del esquema:

    $ grep -h -e '<schema .*org.mate.caja.desktop' \
        -e '<schema .*org.mate.background' \
        -e '<schema .*org.mate.peripherals-keyboard-xkb.general' \
        /usr/local/share/glib-2.0/schemas/org.mate.*
      <schema id="org.mate.background" path="/org/mate/desktop/background/">
      <schema id="org.mate.caja.desktop" path="/org/mate/caja/desktop/" gettext-domain="caja">
      <schema id="org.mate.peripherals-keyboard-xkb.general" path="/org/mate/desktop/peripherals/keyboard/general/">
    

    Y ya podemos utilizar dconf para establecer las propiedades anteriores:

    $ dconf write /org/mate/desktop/peripherals/keyboard/general/duplicate-leds true
    $ dconf write /org/mate/desktop/background/show-desktop-icons false
    $ dconf write /org/mate/caja/desktop/computer-icon-visible false
    $ dconf write /org/mate/caja/desktop/home-icon-visible false
    $ dconf write /org/mate/caja/desktop/trash-icon-visible false
    
  5. Listar primero los directorios en los dialogos de GTK. La solución se encuentra publicada en internet:

    $ dconf write /org/gtk/settings/file-chooser/sort-directories-first true
    
  6. Agregar al grupo operator a los usuarios que pueden apagar y reiniciar el equipo para que no pida contraseña al momento de realizar la operación:

    $ doas usermod -G operator jmpc
    

NOTA: los settings pueden modificarse desde la UI de los programas del escritorio MATE por lo que no se utiliza para ello dconf.

Con esto ya está prácticamente configurado el escritorio MATE; solo quedan ajustes menores mediante las preferencias de MATE.