[RB7] Demande de modification de externalscreen.sh



  • Bonjour,

    Je créé ce topic pour expliquer comment contourner le script externalscreen.sh afin de forcer une fréquence vidéo
    Et je pose aussi d'autres questions car ce n'est pas parfait

    Après avoir écumé des pages et des tonnes de vidéos, je n'arrive pas à :

    • retirer le menu de sélection recalbox (+verbose) au démarrage qui est en 720x400_70Hz
    • retirer l'écran de loading de RB7 qui fait un saut de résolution au démarrage

    Notez que je débute en linux, il y a 3 jours, je ne savais pas encore ce qu'était nano

    Ce que je veux faire :
    Forcer Recalbox 7 à se mettre dans une résolution générale fixée à l'avance et sur une sortie vidéo spécifique
    Dans mon cas, je veux du 640x480 pixels en 60Hz ou proche (ma carte vidéo sort du 59.94Hz, je vais donc utiliser cela) en VGA
    pour mettre mon recalbox PC dans une borne Sega Naomi avec un écran CRT d'origine qui est limité électroniquement en 640 x 480 60Hz

    Ce qu'il est possible de faire dans RB7 :
    Changer les 2 variables dans recalbox.conf pour le port de sortie et la résolution
    MAIS ça ne permet pas de choisir une fréquence précise

    Ce qu'il faudrait faire :
    Modifier le externalscreen.sh pour ajouter toutes les variables disponibles avec xrandr
    (et dans mon cas précis, la fréquence --refresh)

    car par défaut, le script externalscreen.sh renvoie auto en refresh, et ça utilise la fréquence la plus haute (120Hz dans mon cas) et je ne veux pas, il me faut la plus proche de 60Hz, dans mon cas c'est du 59,94Hz

    -

    J'ai tout de même réussi à forcer le système (procédure ci après)
    mais il me reste 2 problèmes de sauts de fréquence/résolution

    Je note au passage que malheureusement, sur les forums, beaucoup de personnes renvoient vers la doc sans explications et sans copier/coller la solution
    sauf que les pages sur github sont effacées et les liens vers ouiaremakers sont effacés aussi, donc énormément de sujets d'aide sont devenus inutiles

    Ma Recalbox :

    recalbox-7.0.1R-x86.img
    EmulationStation - v 7.0.1-Reloaded, built Oct 16 2020 - 06:39:51

    Mon installation:

    Recalbox 7 32 bits installé sur HDD Sata 320Go (avec partition activée à la main)
    PC X86 (MAXDATA)
    Intel Core 2 duo E8400 3Ghz
    4 Gb de RAM
    Carte mère Intel DQ35JOE
    Video intégrée : GMCH 82Q35 (VGA) 256Mb de VRAM fixed , Pas de carte graphique additionnelle, sortie VGA
    Audio intégré HDA Intel (STAC9227 Analog), sortie par jack sur la carte mère, réseau intégré par cable RJ45 sur la carte mère
    Pas de boot USB possible

    Ca fonctionne hyper bien, 50 ou 60 fps partout avec les demos fournies dans l'install

    -

    Voici la procédure de modification que j'ai réalisée
    pour forcer recalbox 7 à rester en 640x480 en 59.94 Hz via ma sortie VGA

    1- commencer par analyser les sorties vidéo possibles :
    via Putty (logiciel windows)
    ouvrir une session SSH sur votre recalbox

    login as :
    root
    recalboxroot

    Xrandr me retourne ces infos : (elles vont varier selon votre chipset graphique!)

    xrandr
    Screen 0: minimum 8 x 8, current 1280 x 1024, maximum 32767 x 32767
    DVI1 disconnected primary (normal left inverted right x axis y axis)
    VGA1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 320mm x 240mm
    1280x1024 60.02*
    1024x768 85.00 75.03 60.00
    800x600 100.03 85.06 75.00 60.32
    640x480 120.11 85.01 75.00 59.94
    720x400 70.08
    VIRTUAL1 disconnected (normal left inverted right x axis y axis)

    "étoile" signifie le mode actuel, c'est celui affiché par ma RB7 après son installation

    2- tester si ça passe sur l'écran et le pc :
    en SSH, si je tape la commande suivante, ça fonctionne (à la volée) :

    xrandr --output VGA1 --mode 640x480 --refresh 59.94

    3- j'ai essayé les anciennes méthodes, mais rien à faire
    j'ai modifié le xinitrc avec nano, (le /etc/X11/xinit/xinitrc ET sa copie ~/.xinitrc)
    la modif est bien dans le fichier enregistré, mais ça ne fonctionne pas au boot de la RB7

    4- sur la RB7, il y a des options pour forcer un écran et sa résolution MAIS PAS sa fréquence
    via http:// accès à la recalbox et à recalbox.conf
    il y a des paramètres pour changer la résolution :

    system.externalscreen.prefered=VGA1
    system.externalscreen.forceresolution=640x480

    et ça fonctionne

    MAIS pas la fréquence qui passe en 120.11 Hz dans mon cas
    (on peut vérifier en ssh via un xrandr et en lisant l'emplacement de *)

    5- si j'ai bien compris le fonctionnement de RB7 : ces variables sont exploitées par ce script :

    externalscreen.sh par strodown
    https://gitlab.com/recalbox/recalbox/-/blob/6a86d7af1c078b65aff62990962b1e9462ab9fb9/board/recalbox/x86/fsoverlay/usr/bin/externalscreen.sh

    mais il impossible de spécifier d'autres paramètres de xrand, le script est trop pauvre en options
    donc on va le modifier directement en dur ça ira plus vite

    idéalement, il faudrait créer une nouvelle variable, mais je n'ai pas ce niveau de code

    6- on passe en SSH root et on tape dans le tas

    passage du disque dur en écriture :

    mount -o remount,rw /

    copie du script pour backup au cas où :

    cd //
    cd usr
    cd bin
    cp externalscreen.sh externalscreen.bak

    modification du script en dur :

    nano //usr/bin/externalscreen.sh

    on modifie ensuite la ligne 42 :
    avant :

    XRANDR_CMD=$(echo "$OUTPUT_MAXRES" | awk -v SEL_OUTPUT="$SEL_OUTPUT" -v FORCE_RES="$FORCE_RES" 'BEGIN {FS="="; printf "xrandr"} $1==SEL_OUTPUT {printf " --output " $1 " --mode " FORCE_RES;} $1!=SEL_OUTPUT {printf " --output " $1 " --off";} END {printf "\n";}')

    après: j'ajoute [ " --refresh 59.94"] pour mon cas particulier

    XRANDR_CMD=$(echo "$OUTPUT_MAXRES" | awk -v SEL_OUTPUT="$SEL_OUTPUT" -v FORCE_RES="$FORCE_RES" 'BEGIN {FS="="; printf "xrandr"} $1==SEL_OUTPUT {printf " --output " $1 " --mode " FORCE_RES " --refresh 59.94";} $1!=SEL_OUTPUT {printf " --output " $1 " --off";} END {printf "\n";}')

    on enregistre (CRTL + O sous nano)
    on quitte nano (CRTL + X)

    on éteint l'ordi depuis recalbox, et on le redémarre pour vérifier que ça fonctionne

    ça fonctionne
    MAIS
    il me reste 2 points noirs dans le boot de RB7

    Q1 - le menu de sélection de Grub (verbose ou pas) est par défaut dans la résolution technique la plus petit, pour moi c'est 720x400 70.08Hz
    et c'est incompatible avec mon écran

    Question 1 : comment supprimer totalement le menu de sélection de grub verbose ? (il ne me sert à rien)
    sachant que nano //boot/boot/grub/grub.cfg ne fonctionne pas, car le fichier est protégé par le système contre la modification
    et je n'ai pas retrouvé sur cette distribution, les fichiers associés au multiboot qui permettent de modifier le grub via des variables

    Q2- ensuite, RB7 passe en 640x480 59.94 Hz
    MAIS il repasse en 1280x1024 60.02Hz juste avant le splash screen de loading (image logo RB sur fond noir)
    puis il reviens en 640x480 59.94 Hz (image logo RB sur fond blanc et barre de loading) et y reste

    Question 2 : pourquoi ?
    je n'ai pas encore trouvé pourquoi, mais ce changement de mode envoie un signal non conforme à la platine de mon écran au risque de le détériorer

    Si quelqu'un sait comment virer le splash screen de loading, pour tout laisser en noir, ça m'arrangerais, en vous remerciant pour toute aide apportée ! 🙂



Want to support us ?

279
Online

80.5k
Users

21.7k
Topics

158.4k
Posts