Tutorial paso a paso: Instalar una versión mínima de debian para 15khz y KMS

Hola a todos

Puede que alguno esté teniendo un Déjà vu (se escribe así? sí lo he mirado en wikipedia). Hace casi cuatro años escribí este otro tutorial y ya va siendo hora de actualizarse.
hilo_tutorial-paso-a-paso-instalar-una-version-minima-de-ubuntu-para-15khz-con-ati-e-intel_2407699

Escribo este nuevo tuto porque de vez en cuando la gente me escribe por privado preguntando dudas, casi siempre porque los enlaces están caídos. También lo hago porque aquel estaba basado en xorg y ya toca cambiarse a KMS.

Para los que no lo sepan, xorg es lo que históricamente se ha utilizado en linux para dibujar los gráficos y KMS es una alternativa más moderna. Sin entrar mucho en detalles, con KMS logramos un arranque más rápido del sistema, menor latencia y mejor rendimiento en los juegos, además desaparece el tearing que podía haber en intel por ejemplo. Claro que no todo van a ser ventajas: hay emus como pcsx2, dolphin, xemu, ares o supermodel que sólo funcionan en xorg y no tienen pinta de dar el salto a KMS.

El tuto tiene 4 partes:

1-Instalar Debian.
Haremos una instalación normal de Debian, así que necesitamos un monitor de pc normal, un teclado y conexión a internet. La conexión puede hacerse por wifi pero nos ahorramos muchos dolores de cabeza si la hacemos por cable. Hay muchos tutoriales en internet y en este mismo foro, así que no me alargaré mucho.
Descargamos la iso oficial desde su página web: 64 bits o 32 bits. Lo grabamos en un pendrive (con balena etcher, por ejemplo) y arrancamos el pc con él. La instalación es bastante sencilla de seguir, ante la duda elegid la opción por defecto y listo. Sólo me voy a detener en 4 puntos:
1-Contraseña de superusuario (root). Es el administrador del sistema, el que puede instalar y desinstalar programas, además de configurar todo. Lo usaremos al principio.
Imagen

2-Usuario normal. Es un usuario sin privilegios, con el que normalmente usaremos el sistema. Yo le he puesto el nombre "arcade".
Imagen

3-Particionado de discos. Utilizaré todo el disco, sin encriptar ni LVM. El pc se usará en exclusiva para jugar así que es la elección lógica. Si tuvieramos windows instalado y quisieramos tener los dos sistemas instalados tendríamos que elegir otras opciones. No entraré en eso.
Imagen

También lo pondré todo en la misma partición, porque es un disco pequeño. Si el disco fuera más grande sería una buena idea separar la partición home.
Imagen

4-Selección de programas. Desactivamos todo menos las dos últimas.
Imagen

Ya tenemos instalado nuestro sistema. Reiniciamos.

2-Instalar Retroarch y configurar para que inicie al arranque.
Como no hemos instalado nigún escritorio nos encontramos con una pantalla negra como esta.
Imagen

Como usuario pondremos "root" (sin comillas) y pulsamos enter. Luego metemos la contraseña. OJO, al escribir la contraseña en pantalla no saldrá nada (ni siquiera asteriscos) así que escribidla bien y dadle a enter. Ya estamos dentro.

A partir de ahora vamos a trabajar con comandos. Podemos hacerlo en el mismo pc o conectarnos por ssh desde otro equipo. Para poder hacer esto último, primero tenemos que averiguar nuestra ip. Podemos hacerlo con este comando.
hostname -I

Es una i mayúscula. Seguimos con el tuto.

Ahora le daremos privilegios de administrador al usuario que hemos creado antes (en mi caso se llama "arcade") para no tener que usar más root. Instalamos sudo y añadimos a nuestro usuario al grupo de administradores.
apt install sudo
adduser arcade sudo

Salimos con el comando "exit" y volvemos a entrar, pero esta vez con nuestro usuario.
Ahora configuraremos el sistema para que al arrancar no nos pida el nombre de usuario y contraseña. Para eso crearemos una carpeta y dentro un fichero llamado autologin.conf.
sudo mkdir /etc/systemd/system/getty@tty1.service.d
sudo nano /etc/systemd/system/getty@tty1.service.d/autologin.conf

Con el primer comando nos pedirá nuestra contraseña, para asegurar que tenemos permisos de administrador. Con el último comando se nos abrirá el editor de textos nano. Escribimos esto:
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --autologin arcade %I $TERM

(si nos hemos conectado por ssh es más fácil, porque podemos copiar y pegar)
Pulsamos la combinación de teclas control+x para salir. Nos preguntará si queremos guardar y le decimos que sí. Vamos a comprobar que lo hemos hecho bien:
sudo reboot

Al iniciar el pc en lugar de la pantalla de login debería salirnos el usuario directamente. Si no es así, comprobad que fichero está exactamente cómo el mío, es muy fácil dejarse algo si no hacemos copiar y pegar.
Ahora instalaremos retroarch y prepararemos el sistema para que sea lo primero que se ejecute.
sudo apt install retroarch
sudo nano /etc/profile.d/99-retroarch.sh

De nuevo hemos usado nano para crear un fichero. Escribimos esto:
#!/bin/sh

if [ "$(tty)" == "/dev/tty1" ] ; then
retroarch
fi

Ahora tenemos que darle dos permisos especiales a nuestro usuario. Sin ellos no puede usar aplicaciones gráficas ni el teclado dentro de KMS. Después reiniciamos para comprobar que todo está bien.
sudo adduser arcade render input
sudo reboot

Listo. Ahora al encender el pc debería abrirse retroarch directamente. Hemos creado nuestro propio lakka!

3-Añadir el soporte para 15khz.
En la parte final del tuto instalaremos dos cosas: un kernel compatible con 15khz y una versión más nueva de retroarch, compatible con switchres. Tenéis dos opciones, compilar todo nosotros mismos o descargar e instalar los paquetes que he preparado yo.

3.1-Compilar un kernel y una versión de retroarch para 15khz nosotros mismos.
Primero saldremos de retroarch para volver a la consola. A continuación instalaremos los programas necesarios para trabajar.
sudo apt install git devscripts atool
sudo mk-build-deps linux --install --remove
sudo mk-build-deps retroarch --install --remove

El primer comando instala git (para gestionar el código fuente de los programas que compilaremos) devscripts (para ayudarnos a instalar dependencias) y atool (para ayudarnos a descomprimir). El segundo comando crea un paquete con todas las dependencias para compilar un kernel, lo instala y lo borra. Lo hacemos así porque nos facilita la limpieza más adelante. El tercero hace lo mismo con las dependencias de retroarch.

Ahora crearemos una carpeta de trabajo y descargaremos el código fuente de cada proyecto.
mkdir compile
cd compile
wget "https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.63.tar.xz"
aunpack linux-6.6.63.tar.xz
git clone https://github.com/D0023R/linux_kernel_15khz
git clone https://github.com/libretro/retroarch

Ya hemos descargado y descomprimido el código fuente del kernel 6.6.63. Es el actual longterm, esto quiere decir que es viejo pero tiene soporte y recibe actualizaciones de seguridad. También hemos descargado desde github los parches para 15khz y el código fuente de retroarch.

Empezamos parcheando el kernel.
cd linux-6.6.63
patch -p1 < ../linux_kernel_15khz/linux-6.6/01_linux_15khz.patch
patch -p1 < ../linux_kernel_15khz/linux-6.6/02_linux_15khz_interlaced_mode_fix.patch
patch -p1 < ../linux_kernel_15khz/linux-6.6/03_linux_15khz_dcn1_dcn2_interlaced_mode_fix.patch
patch -p1 < ../linux_kernel_15khz/linux-6.6/04_linux_15khz_dce_interlaced_mode_fix.patch
patch -p1 < ../linux_kernel_15khz/linux-6.6/05_linux_15khz_amdgpu_pll_fix.patch
patch -p1 < ../linux_kernel_15khz/linux-6.6/06_linux_switchres_kms_drm_modesetting.patch

Ahora copiamos la configuración del kernel que tenemos instalado ahora mismo y actualizamos esa configuración. Este paso es importante, ya que el nuevo kernel podría tener nuevas opciones que no aparecen en la vieja configuración. Nos ahorramos muchos quebraderos de cabeza.
cp /boot/config-$(uname -r) .config
make olddefconfig

Para acabar de configurar el kernel cambiamos dos cosas con el comando sed (ed es un editor de texto y sed es una variante que nos permite usarlo desde la línea de comandos directamente).
sed -i 's/CONFIG_DRM_KMS_HELPER=m/CONFIG_DRM_KMS_HELPER=y/g' .config
sed -i 's/CONFIG_LOCALVERSION=""/CONFIG_LOCALVERSION="-15khz"/g' .config

Con el primer cambio integramos KMS en el kernel y con el segundo le damos un nombre especial a nuestro kernel. No son necesarios, pero ayudan. Por último compilamos.
make clean
make -j`nproc` bindeb-pkg

La compilación tarda MUCHO. Dependiendo del equipo pueden ser varias horas. Cuando acabe tendremos 3 ficheros que tenemos que instalar a mano.
sudo dpkg -i ../linux-image-6.6.63-15khz_6.6.63-1_amd64.deb
sudo dpkg -i ../linux-headers-6.6.63-15khz_6.6.63-1_amd64.deb
sudo dpkg -i ../linux-libc-dev_6.6.63-1_amd64.deb

Una vez instalado el kernel, vamos con retroarch. Entramos en la carpeta, configuramos, compilamos e instalamos.
cd ../retroarch
./configure
make -j`nproc`
sudo make install

Listo. Ahora borramos las dependencias y las descargas.
rm -R ~/compile
sudo apt purge retroarch-build-deps linux-build-deps git devscripts
sudo apt autoremove

3.2-Instalar un kernel y una versión de retroarch para 15khz compiladas por Ronbin.
Esto será más rápido. Descargamos 4 paquetes y los instalamos.
wget "https://www.dropbox.com/scl/fi/f92gp2sn9iz3ogahqr29y/linux-image-6.6.63-15khz_6.6.63-1_amd64.deb?rlkey=3lnd0wn8c5sqlpf95jptcq2a3&st=o02h24wd&dl=1" -O linux-image.deb
wget "https://www.dropbox.com/scl/fi/gwvwvgdu5pxepl3qi8vs2/linux-headers-6.6.63-15khz_6.6.63-1_amd64.deb?rlkey=n8blgf80y2vhu3o2o2knklyhc&st=tteb8jqy&dl=1" -O linux-headers.deb
wget "https://www.dropbox.com/scl/fi/93tqz73esy6gqsd3adlln/linux-libc-dev_6.6.63-1_amd64.deb?rlkey=xa1cygr9pfcy3ve1140tzegnl&st=8eqmbiwj&dl=1" -O linux-libc.deb
wget "https://www.dropbox.com/scl/fi/oy475jwjxw18hs3ymbmrs/retroarch_v1.19.1_amd64.deb?rlkey=ruykkuch2sqp8zh09hw3psh7o&st=zlozld2b&dl=1" -O retroarch.deb
sudo dpkg -i linux-image.deb
sudo dpkg -i linux-headers.deb
sudo dpkg -i linux-libc.deb
sudo dpkg -i retroarch.deb

Bueno, después de hacer todo el tutorial, tenemos una debian que arranca automáticamente a retroarch. Tenemos también todo lo necesario para funcionar a 15khz pero no está activado. Eso lo haremos ahora.

4-Configurar los 15khz
Primero borramos la configuración actual de retroarch.
rm -R .config/retroarch
sudo rm /etc/retroarch.cfg

Ahora crearemos una configuración nueva para retroarch
sudo nano /etc/retroarch.cfg

Y dejamos el fichero así
menu_driver = "rgui"
crt_switch_resolution = "4"
#crt_switch_resolution_super = "1"

Como siempre pulsamos cotrol+x para guardar y cerrar. Si os fijáis la última línea tiene una almohadilla (#). Si nuestra gráfica es intel, lo dejamos así. Si nuestra gráfica es ati la quitamos. Así retroarch sabrá si queremos usar super resoluciones.

Y por último configuramos el kernel para que arranque a 15khz.
sudo nano /etc/default/grub

Buscamos la línea "GRUB_CMDLINE_LINUX_DEFAULT" y la dejamos así
GRUB_CMDLINE_LINUX_DEFAULT="video=VGA-1:1280x480iec"'

Si nuestra gráfica es ati mejor dejarlo así.
GRUB_CMDLINE_LINUX_DEFAULT="video=VGA-1:640x480iec"'


NOTA: Si nuestra gráfica en lugar de vga la conectamos por dvi, cambiamos VGA-1 por DVI-I-1. Si usáramos hdmi, tendríamos que poner "HDMI-A-1", pero no creo que funcione... Claro que todo es probar.

Guardamos y cerramos el editor de texto. Luego escribimos esto para actualizar la configuración.
sudo update-grub

Y apagamos el equipo. Desconectamos el monitor, enchufamos nuestra tele de tubo cruzamos los dedos y encendemos. Deberíamos ver el menú clásico de retroarch a 240p.

5-Algunos extras que facilitan la vida
5.1-Apagar el equipo pulsando el botón de encendido
Sólo hay que editar un fichero.
sudo nano /etc/systemd/logind.conf

Buscamos esta línea.
#HandlePowerKey=poweroff

Y le quitamos la almohadilla.
HandlePowerKey=poweroff

5.1-Instalar samba
Ahora instalaremos y configuraremos samba para poder pasar las roms por red.
sudo apt install samba
sudo nano /etc/samba/smb.conf

Al final del fichero añadimos esto:
[arcade]
comment = Arcade
path = /home/arcade
guest ok = yes
public = yes
browseable = yes
writeable = yes
create mask = 0644
directory mask = 0755
force user = arcade
force group = arcade


Reiniciamos el servicio
sudo systemctl restart samba

5.3-Instalar network-manager para conectarnos al wifi
Network manager es un gestor de redes que puede usarse desde el terminal. Lo instalamos
sudo apt install network-manager


Para abrirlo usaremos el comando "nmtui".

5.4-Desactivar la contraseña para sudo
Si estamos hartos de escribir la contraseña cada vez que usamos sudo podemos hacer un cambio en la configuración. Creamos un fichero nuevo:
sudo nano  /etc/sudoers.d/arcade


Y lo dejamos así
arcade ALL=(ALL) NOPASSWD: ALL


A partir de ahora no nos pedirá la contraseña al usar sudo.
@Ronbin hola master ?

una consulta yo estoy usando linux mint y al salir a la terminal ejecutar retroarch con ogl en efecto me sale video driver KMS

pero al hacer eso mismo con vulkan me sale video driver khr_display

osea que el khr_display es el equivalente a kms


digo ogl kms

vulkan khr_display


no se si me explique bien ? XD
Hola

Supongo que sí... Lo que pasa es que si miras en la pagína de switchres
https://github.com/antonioginer/switchres

Verás que sólo funciona en xorg y KMS. Wayland no está soportado y no se si lo estará algún día. Ahora mismo diría que @Calamity15kHz está más interesado en el usar la mister como salida de vídeo que en investigar wayland.
Probado con un e8500 y una intel q35 y va del carajo. Te debo unas birras o lo que quieras.
@Tomax_Payne envía turboduo y neogeocd que ya no las necesitas :p

Ahora en serio, estoy pensando en añadir un livecd para que la gente pueda probarlo más fácilmente. Y también añadir emulationstation, pero no se si hay mucho interés en esto, porque ya existe batocera.
Ronbin escribió:@Tomax_Payne envía turboduo y neogeocd que ya no las necesitas :p

Ahora en serio, estoy pensando en añadir un livecd para que la gente pueda probarlo más fácilmente. Y también añadir emulationstation, pero no se si hay mucho interés en esto, porque ya existe batocera.

En mi caso, no arrancaba ningun batocera posterior al 25 (error xorg). Asi que he salvado un par de pcs con esta grafica.
A mi, conforme está, tipo lakka me va bien.
¿Qué ventajas tiene usar MAME en Linux frente a usarlo en Windows? A mí Retroarc no me interesa ni nada fuera de MAME. Mi idea es usar mi versión de MAME, mi frontend con mi layout (MaLa o Attract Mode) y configurarlo todo a mano (no me gustan los paquetes que vienen preparados con todo). Lo que pasa es que de Linux no tengo ni idea.
Elaphe escribió:¿Qué ventajas tiene usar MAME en Linux frente a usarlo en Windows? A mí Retroarc no me interesa ni nada fuera de MAME. Mi idea es usar mi versión de MAME, mi frontend con mi layout (MaLa o Attract Mode) y configurarlo todo a mano (no me gustan los paquetes que vienen preparados con todo). Lo que pasa es que de Linux no tengo ni idea.


Pues así a bote pronto te puedes hacer un Linux con lo mínimo para que te funcione todo y así ahorrarte centenares de procesos inútiles que windows te mete por defecto que ocupan memoria y recursos estúpidos que no sirven para nada los cuales posiblemente te creen stuttering puntuales y pérdidas de rendimiento en algún momento.

P.D. También hay Attract Mode para Linux.

P.D.2. Una vez te haces a las rutas de directorios en Linux, el resto es prácticamente lo mismo.
Elaphe escribió:¿Qué ventajas tiene usar MAME en Linux frente a usarlo en Windows? A mí Retroarc no me interesa ni nada fuera de MAME. Mi idea es usar mi versión de MAME, mi frontend con mi layout (MaLa o Attract Mode) y configurarlo todo a mano (no me gustan los paquetes que vienen preparados con todo). Lo que pasa es que de Linux no tengo ni idea.

MaLa no hay para linux, Attract Mode sí. El problema es que Attract Mode funciona en xorg pero no en KMS. Hay un fork llamado attractplus que sí que funciona... Pero yo no consigo que arranque. Lo compilo sin problema pero al ejecutarlo me da violación de segmento. Me fastidia porque es el frontend que más me gusta, sus filtros vienen muy bien para MAME.

Al final me he tenido que pasar a emulationstation. Estoy mirando themes, y hay dos que me gustan para usar en CRT: uno que imita al menú de la MiSTer y otro que está pensado para consolas portátiles. Pero no he tenido tiempo de probarlos a fondo.

Sobre linux vs windows... yo siempre digo lo mismo: al instalar windows hay un montón de cosas que tengo que desactivar y al instalar linux hay un montón de cosas que tengo que activar. En principio ocupa menos y consume menos, pero puede dar algo más de trabajo. Eso sí, una vez configurado te olvidas de tocar nada.
Yo es que no concibo usar un frontend con un layout que no haya hecho yo a mi gusto.
Es lo bueno de linux, hace mucho tiempo hice un tuto parecido a este, pero para archlinux.
Se obtiene un rendimiento brutal y esa es la razon por la que me gusta retroarch, algunos de esos emus que haz mencionado, ya tienen un core para retroarch y esto funcionaria sin problemas.
Estupendo y detallado tuto, Ronbin, como siempre, nos tienes muy mal acostumbrados [bye] [beer]

Apoyo tu iniciativa de hacer una imagen con lo básico, ya puestos a innovar un poco elegiría como frontend pegasus, que es como emulationstation, pero con un concepto y diseño más actual, además se de buena tinta que funciona en KMS sin muchos rollos.
@jigar conozco retrofe, sí. Lo he probado y en KMS funciona bien. Lo que pasa es que lo veo más pensado para pantallas modernas... No he visto ningún theme que me convezca para CRT. Si queréis puedo añadir al tuto como compilarlo e instalarlo.

Por cierto, parece ser que el kernel que puesto (6.11) da problemas con el driver amdgpu... No se si alguien lo ha probado. Yo sólo he probado en un futro con el driver radeon y ningún problema. Con intel también sin problema.
Ronbin escribió:@jigar conozco retrofe, sí. Lo he probado y en KMS funciona bien. Lo que pasa es que lo veo más pensado para pantallas modernas... No he visto ningún theme que me convezca para CRT. Si queréis puedo añadir al tuto como compilarlo e instalarlo.

Por cierto, parece ser que el kernel que puesto (6.11) da problemas con el driver amdgpu... No se si alguien lo ha probado. Yo sólo he probado en un futro con el driver radeon y ningún problema. Con intel también sin problema.


Yo con 6.11 he tenido problemas con la GPU AMD en el sobremesa, pero en la 6.12 volvió a la normalidad.

SI pones una versión temprana del 6.11 ese fallo no está, creo que entró con la 6.11.5.

Ojo yo te hablo de sobremesa, no se como andará en tu configuración, pero que te confirmo que si, AMD daba un poco por saco con el 6.11 en mi caso era con DXVK con DX12
@DJ Deu gracias por comentarlo. Por si acaso he compilado el kernel 6.6.63 que es el actual longterm. Esto quiere decir que es viejo pero aún recibe actualizaciones de seguridad. He actualizado los enlaces del tutorial con los de este otro kernel.

A parte, también he compilado el 6.12.1. Dejo aquí los enlaces por si alguien quiere probarlo.
wget "https://www.dropbox.com/scl/fi/1b8hr2w3ifdmkx3fb8pkc/linux-image-6.12.1-15khz_6.12.1-1_amd64.deb?rlkey=zmxq834dnyywj8hjz48h323tp&st=3zc4xcrs&dl=1" -O linux-image.deb
wget "https://www.dropbox.com/scl/fi/kb037knuqwr7qdx19nif3/linux-headers-6.12.1-15khz_6.12.1-1_amd64.deb?rlkey=jfjjn93psyh11lvobyxgr4fnf&st=ewwd2d9y&dl=1" -O linux-headers.deb
wget "https://www.dropbox.com/scl/fi/51m84n9llz49exsbiemjb/linux-libc-dev_6.12.1-1_amd64.deb?rlkey=rnqu4qt687ws44tymw3m80z2e&st=9i27wf21&dl=1" -O linux-libc.deb
14 respuestas