logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 11-08-2024 00:00:21

Zébulon
Membre
Distrib. : Debian GNU/Linux 12 (bookworm) x86_64
Noyau : Linux 6.1.0-23-amd64
(G)UI : Xfce 4.18
Inscription : 07-07-2024

Customisation de Oneko (projet de bricolage fun)

À force de me voir utiliser Linux (Debian hihi) ma copine semble de plus en plus tentée par l'idée de quitter Windows. C'est des petits trucs tout bête comme cbonsai et oneko qui semblent le plus la fasciner (oui ces petits softs si inutiles mais indispensables wink)
Elle adore Oneko (apparemment ça peut tourner sous Windows mais chuuut) et elle m'a suggéré une idée rigolote : avoir un petit cochon qui court après le curseur parmi l’éventail de personnages. Chouette une bonne occasion de bidouiller un peu ! smile

Ni une ni deux je me met en quête du code source, utilisant déjà le Oneko présent dans les paquets Debian et le trouvant fort convenable je vais le chercher ici.
Me voilà donc avec une belle base de travail. Premièrement et le plus amusant peut-être, éditer les fichiers bitmaps pour produire les différentes trames qui serviront à animer le dodu suidé. Les amateurs éclairés auront remarqué que j'ai utilisé les fichiers bitmaps de Neko comme base wink
39a9bbef8fe934f5cabb326e67159f5db5730220391986b828e0a0ae181fd85c.jpg
Voilà chose faite pour chacun des 32 fichiers XBM ainsi que leur pendant "mask" sans oublier bien sûr de créer les petits fichiers .include idoines. Dans ma gerbe créatrice, je décide de lui créer un petit curseur spécifique : un gâteau dans une assiette. J'ai utilisé le programme bitmap pour faire tout ça mais il m'a été impossible de paramétrer le hotspot que j'ai dû définir directement en éditant le fichier XBM dans mousepad.
2694b262a70efcb97a2f9302827e70af21b365ef60ab22828f28b7d5be7862e9.png
Oui ça ressemble aussi à un petit caca mais on reste dans la thématique du cochon (bien que ces animaux soient bien moins sales que ce que leur attribue leur réputation) smile

Seconde phase, moins agréable mais intéressante : éditer oneko.c et oneko.h pour leur demander de prendre en compte le petit nouveau.
Avant ça, il m'a été nécessaire d'appliquer les patches proposés dans le dossier debian inclus avec le code source (virer les références à BSD pour une histoire de licence et autres corrections liées à des erreurs typographiques et de compilation). Il m'a fallu faire quelques recherches et je pense ne pas m'être trompé en faisant :

patch -Np1 -i correctif.patch


Les patchs étant dans le même dossier que leurs fichiers cible.
Me voilà donc avec un oneko.c et un oneko.h tout beaux tout patchés. Commence alors le fastidieux travail de modification du code pour y déclarer mes modifications; aucun secret, je me  base une nouvelle fois sur les modèles préexistant pour neko, dog, sakura... Et je l'adapte à mon cochon (qui se nomme ici piglet). J'utilise mousepad pour ça, peut-être existe-t-il des outils plus accès "codage" mais ça me convient à mon niveau.

Je relis, tout semble OK. L'étape finale de la compilation approche. J'utilise gcc en m'appuyant sur le man et des tutos pour m'y retrouver, mais je suis en freestyle complet : rien ne fonctionne je ne fais rien comme il faut. Si ça vous intéresse et ça me ferait plaisir d'apprendre de mes erreurs, n'hésitez pas à me donner des pistes. (Eh, pourquoi que t'as pas invoqué les librairies avec -l ?)

zebulon@machine:~/.tmp/Projet oneko_cif/debian-oneko-master/oneko-master$ gcc -c oneko.c
zebulon@machine:~/.tmp/Projet oneko_cif/debian-oneko-master/oneko-master$ gcc -o oneko oneko.o
/usr/bin/ld : oneko.o : dans la fonction « InitBitmapAndGCs » :
oneko.c:(.text+0xc9) : référence indéfinie vers « XCreatePixmapFromBitmapData »
/usr/bin/ld : oneko.c:(.text+0x11d) : référence indéfinie vers « XCreateBitmapFromData »
/usr/bin/ld : oneko.c:(.text+0x14c) : référence indéfinie vers « XCreateGC »
/usr/bin/ld : oneko.o : dans la fonction « NekoGetDefault » :
oneko.c:(.text+0x195) : référence indéfinie vers « XGetDefault »
/usr/bin/ld : oneko.c:(.text+0x1c3) : référence indéfinie vers « XGetDefault »
/usr/bin/ld : oneko.o : dans la fonction « MakeMouseCursor » :
oneko.c:(.text+0x6ac) : référence indéfinie vers « XCreateBitmapFromData »
/usr/bin/ld : oneko.c:(.text+0x73a) : référence indéfinie vers « XCreateBitmapFromData »
/usr/bin/ld : oneko.c:(.text+0x7b7) : référence indéfinie vers « XCreatePixmapCursor »
/usr/bin/ld : oneko.c:(.text+0x7d8) : référence indéfinie vers « XFreePixmap »
/usr/bin/ld : oneko.c:(.text+0x7ee) : référence indéfinie vers « XFreePixmap »
/usr/bin/ld : oneko.o : dans la fonction « SetupColors » :
oneko.c:(.text+0x89d) : référence indéfinie vers « XAllocNamedColor »
/usr/bin/ld : oneko.c:(.text+0x8fc) : référence indéfinie vers « XAllocNamedColor »
/usr/bin/ld : oneko.o : dans la fonction « Select_Window » :
oneko.c:(.text+0x9a2) : référence indéfinie vers « XGrabPointer »
/usr/bin/ld : oneko.c:(.text+0x9fb) : référence indéfinie vers « XAllowEvents »
/usr/bin/ld : oneko.c:(.text+0xa1d) : référence indéfinie vers « XWindowEvent »
/usr/bin/ld : oneko.c:(.text+0xa8a) : référence indéfinie vers « XUngrabPointer »
/usr/bin/ld : oneko.o : dans la fonction « Window_With_Name » :
oneko.c:(.text+0xac3) : référence indéfinie vers « XFetchName »
/usr/bin/ld : oneko.c:(.text+0xb0d) : référence indéfinie vers « XQueryTree »
/usr/bin/ld : oneko.c:(.text+0xb7e) : référence indéfinie vers « XFree »
/usr/bin/ld : oneko.o : dans la fonction « InitScreen » :
oneko.c:(.text+0xba5) : référence indéfinie vers « XOpenDisplay »
/usr/bin/ld : oneko.c:(.text+0xc8b) : référence indéfinie vers « XSynchronize »
/usr/bin/ld : oneko.c:(.text+0xd3c) : référence indéfinie vers « XGetGeometry »
/usr/bin/ld : oneko.c:(.text+0xe9a) : référence indéfinie vers « XQueryTree »
/usr/bin/ld : oneko.c:(.text+0xead) : référence indéfinie vers « XFree »
/usr/bin/ld : oneko.c:(.text+0xf49) : référence indéfinie vers « XChangeWindowAttributes »
/usr/bin/ld : oneko.c:(.text+0xf94) : référence indéfinie vers « XCreateWindow »
/usr/bin/ld : oneko.c:(.text+0xfd9) : référence indéfinie vers « XStoreName »
/usr/bin/ld : oneko.c:(.text+0x1001) : référence indéfinie vers « XSelectInput »
/usr/bin/ld : oneko.c:(.text+0x1010) : référence indéfinie vers « XFlush »
/usr/bin/ld : oneko.o : dans la fonction « RestoreCursor » :
oneko.c:(.text+0x104b) : référence indéfinie vers « XCreateFontCursor »
/usr/bin/ld : oneko.c:(.text+0x108a) : référence indéfinie vers « XChangeWindowAttributes »
/usr/bin/ld : oneko.c:(.text+0x10b4) : référence indéfinie vers « XFreePixmap »
/usr/bin/ld : oneko.c:(.text+0x10d1) : référence indéfinie vers « XFreePixmap »
/usr/bin/ld : oneko.c:(.text+0x10ed) : référence indéfinie vers « XFreeGC »
/usr/bin/ld : oneko.c:(.text+0x1117) : référence indéfinie vers « XFreeCursor »
/usr/bin/ld : oneko.c:(.text+0x1126) : référence indéfinie vers « XCloseDisplay »
/usr/bin/ld : oneko.o : dans la fonction « DrawNeko » :
oneko.c:(.text+0x1244) : référence indéfinie vers « XConfigureWindow »
/usr/bin/ld : oneko.c:(.text+0x1267) : référence indéfinie vers « XMapWindow »
/usr/bin/ld : oneko.c:(.text+0x12a1) : référence indéfinie vers « XFillRectangle »
/usr/bin/ld : oneko.c:(.text+0x12b4) : référence indéfinie vers « XFlush »
/usr/bin/ld : oneko.o : dans la fonction « RedrawNeko » :
oneko.c:(.text+0x130c) : référence indéfinie vers « XFillRectangle »
/usr/bin/ld : oneko.c:(.text+0x131f) : référence indéfinie vers « XFlush »
/usr/bin/ld : oneko.o : dans la fonction « NekoDirection » :
oneko.c:(.text+0x139b) : référence indéfinie vers « sqrt »
/usr/bin/ld : oneko.o : dans la fonction « CalcDxDy » :
oneko.c:(.text+0x171c) : référence indéfinie vers « XQueryPointer »
/usr/bin/ld : oneko.c:(.text+0x1793) : référence indéfinie vers « XGetInputFocus »
/usr/bin/ld : oneko.c:(.text+0x17eb) : référence indéfinie vers « XQueryTree »
/usr/bin/ld : oneko.c:(.text+0x17fb) : référence indéfinie vers « XFree »
/usr/bin/ld : oneko.c:(.text+0x1878) : référence indéfinie vers « XGetWindowAttributes »
/usr/bin/ld : oneko.c:(.text+0x1b35) : référence indéfinie vers « sqrt »
/usr/bin/ld : oneko.o : dans la fonction « ProcessKeyPress » :
oneko.c:(.text+0x2027) : référence indéfinie vers « XLookupString »
/usr/bin/ld : oneko.o : dans la fonction « ProcessEvent » :
oneko.c:(.text+0x2097) : référence indéfinie vers « XNextEvent »
/usr/bin/ld : oneko.c:(.text+0x210c) : référence indéfinie vers « XRaiseWindow »
/usr/bin/ld : oneko.c:(.text+0x2126) : référence indéfinie vers « XPending »
/usr/bin/ld : oneko.o : dans la fonction « NekoErrorHandler » :
oneko.c:(.text+0x2243) : référence indéfinie vers « XGetErrorText »
/usr/bin/ld : oneko.o : dans la fonction « GetArguments » :
oneko.c:(.text+0x29c1) : référence indéfinie vers « XParseGeometry »
/usr/bin/ld : oneko.o : dans la fonction « main » :
oneko.c:(.text+0x2bf6) : référence indéfinie vers « XSetErrorHandler »
collect2: error: ld returned 1 exit status
 


Je finis, désabusé, par taper la commande trouvée sur ce Github

gcc -Wno-parentheses -std=c11 -pedantic -D_DEFAULT_SOURCE oneko.c -o oneko -lc -lm -lX11 -lXext


Ok, la compilation s'effectue non sans sa petite guirlande de "warnings" et je me trouve à présent avec un oneko exécutable.
Tout content je le lance et là, désillusion : le petit personnage qui se déplace maintenant à l'écran se retrouve devant un petit cadre blanc. Fichtre et c'est pas la ribambelle de messages dispensés par gcc qui m'aident à y voir plus clair. Il y en a beaucoup, vraiment et à moins que vous ne demandiez je ne vais pas les mettre ici.
yqpzfm.png
J'ai eu sensiblement les même problème avec le code source original

Booon... Ok... Je repars de zéro cette fois-ci en essayant avec la version proposée sur le Github sus-cité. Bonus il est livré avec un petit fichier cmake. Je reprends tout mes bitmaps, mes .include, je réécris les fichiers oneko.c et .h... Cette fois-ci pas de patch à appliquer.
Moment de grâce, je lance le cmake et malgré quelques "warnings" la construction se déroule sans encombre et me voilà avec un nouvel exécutable oneko.

./oneko -h


me propose bien le nouveau personnage piglet que j'invoque avec

./oneko -piglet -bg pink -fg black


pour de bonnes couleurs de cochon bien rose (mais on peut préférer le cochons verts ou orange hein c'est selon tongue)
i1qb9e.gif

Honnêtement, je suis super content du résultat une fois que le petit cochon prend vie et j'ai pris beaucoup de plaisir à bidouiller tout ça. Je regrette néanmoins d'avoir eu des déconvenues avec gcc et ça me rappelle qu'on à beau y mettre le nez, se creuser la cervelle... Quand on sait pas faire, y'a des trucs c'est plus abscons à faire comme on le voudrait roll
Utiliser les sources Debian (ça marche bien quand je l'installe avec apt alors y'a pas de raison), les éditer et construire un paquet tout propre avec ma version du cochon serait vraiment bien.

Voilà c'était le petit bricolage du jour, toute suggestion d'amélioration et de critique est la bienvenue smile

Dernière modification par Zébulon (11-08-2024 00:01:56)


Nombreux savent mais peu comprennent.

Hors ligne

#2 13-08-2024 09:13:43

Zébulon
Membre
Distrib. : Debian GNU/Linux 12 (bookworm) x86_64
Noyau : Linux 6.1.0-23-amd64
(G)UI : Xfce 4.18
Inscription : 07-07-2024

Re : Customisation de Oneko (projet de bricolage fun)

Maintenant que j'ai saisi l'idée générale je me suis penché à nouveau sur la question de la modification du paquet Debian. J'ai donc suivi le Building Tutorial en utilisant quilt en place de dpatch et en l'adaptant à mon projet concernant oneko.
Concernant le passage Building the modified package avec

debuild -b -uc -us


je me retrouve bien avec un fichier oneko_1.2.sakura.6-15.1_amd64.deb que j'installe avec

sudo dpkg -i oneko_1.2.sakura.6-15.1_amd64.deb


Jusque là tout fonctionne bien, le soft s'installe avec mes modifications et semble fonctionner au poil (de chat tongue).

En revanche, allons plus loin en appliquant la partie Building the source package avec

debuild -us -uc


Ça ne fonctionne pas avec pour retour


dpkg-source: erreur: abandon suite à des modifications amont inattendues, voir /tmp/oneko_1.2.sakura.6-15.1.diff.r9xcRx
dpkg-source: info: Conseil : assurez-vous que la version dans « debian/changelog » correspond à l'arbre source extrait
dpkg-source: info: vous pouvez intégrer les modifications locales avec dpkg-source --commit
dpkg-buildpackage: erreur: le sous-processus dpkg-source -b . a retourné l’état de sortie 2
debuild: fatal error at line 1182:
dpkg-buildpackage -us -uc -ui failed
 


Et là je sèche complètement. Mon changelog est bon et la ligne 1182 dans /tmp/oneko_1.2.sakura.6-15.1.diff.r9xcRx ne me semble pas déconnante (si tant est que c'est bien ce fichier dont il est question).
kernal_panic.gif


Nombreux savent mais peu comprennent.

Hors ligne

Pied de page des forums