Here a version where I crammed the UTF-8 or HTML equivalents of all 220 or so extended ASCII characters, 12 function keys and some more into 1 keyboard.
It's assembled from example keyboards found in the installation and online, as well as a list of ASCII characters and some experimenting. Feel free to use it and remove what you don't need.
Tested on Raspberry OS with a PI Zero and PI 4, using a 1920x1080 display. Works fine on an image downloaded from Raspberry but not on one pre-installed by a vendor; will check why when I find time. Some special characters don't display correctly on the keyboard, depending on your configuration, and may require using images. Some characters require methods to work and may not be 100% reliable. Keyboard sometimes opens with a title bar and options like resize or move and sometimes without; not sure why. (Edit: It was an older version which didn't supply graphic files for tab, arrows and so on, so I created my own. Useful error message appeared when starting it from the terminal).
Options like language specific layouts aren't tested or implemented. Examples should be sufficient to understand how to add further keys. Some controls are missing or not really tested. Feel free to make improvements. Besides this code to be saved as keyboard.xml, you may want to create the PNG files arrow_down, arrow_up, arrow_left, arrow_right, arrow_up_1, caps and caps_up in your .matchbox directory.
<?xml version="1.0" encoding="UTF-8"?>
<keyboard>
<layout id="crammy keyboard">
<row>
<key>
<default display="`" action="xkeysym:grave" />
<shifted display="~" action="~" />
<mod1 display="´" action="´" />
<mod2 display="°" />
<mod3 display="esc" action="escape" />
</key>
<key extended="true">
<default display="ˆ" action="ˆ" />
<shifted display="˜" />
<mod1 display="¨" />
<mod2 display="¯" />
<mod3 display="¸" />
</key>
<key>
<default display="1" />
<shifted display="!" />
<mod1 display="image:/usr/share/matchbox-keyboard/super_1.png" action="xkeysym:onesuperior" />
<mod2 display="image:/usr/share/matchbox-keyboard/sub_1.png" action="xkeysym:onesubscript" />
<mod3 display="f1" action="f1" />
</key>
<key>
<default display="2" />
<shifted display="@" />
<mod1 display="image:/usr/share/matchbox-keyboard/super_2.png" action="xkeysym:twosuperior" />
<mod2 display="image:/usr/share/matchbox-keyboard/sub_2.png" action="xkeysym:twosubscript" />
<mod3 display="f2" action="f2" />
</key>
<key>
<default display="3" />
<shifted display="#" />
<mod1 display="image:/usr/share/matchbox-keyboard/super_3.png" action="xkeysym:threesuperior" />
<mod2 display="image:/usr/share/matchbox-keyboard/sub_3.png" action="xkeysym:threesubscript" />
<mod3 display="f3" action="f3" />
</key>
<key>
<default display="4" />
<shifted display="$" />
<mod1 display="image:/usr/share/matchbox-keyboard/super_4.png" action="xkeysym:foursuperior" />
<mod2 display="image:/usr/share/matchbox-keyboard/sub_4.png" action="xkeysym:foursubscript" />
<mod3 display="f4" action="f4" />
</key>
<key>
<default display="5" />
<shifted display="%" />
<mod1 display="image:/usr/share/matchbox-keyboard/super_5.png" action="xkeysym:fivesuperior" />
<mod2 display="image:/usr/share/matchbox-keyboard/sub_5.png" action="xkeysym:fivesubscript" />
<mod3 display="f5" action="f5" />
</key>
<key>
<default display="6" />
<shifted display="^" />
<mod1 display="image:/usr/share/matchbox-keyboard/super_6.png" action="xkeysym:sixsuperior" />
<mod2 display="image:/usr/share/matchbox-keyboard/sub_6.png" action="xkeysym:sixsubscript" />
<mod3 display="f6" action="f6" />
</key>
<key>
<default display="7" />
<shifted display="&" />
<mod1 display="image:/usr/share/matchbox-keyboard/super_7.png" action="xkeysym:sevensuperior" />
<mod2 display="image:/usr/share/matchbox-keyboard/sub_7.png" action="xkeysym:sevensubscript" />
<mod3 display="f7" action="f7" />
</key>
<key>
<default display="8" />
<shifted display="*" />
<mod1 display="image:/usr/share/matchbox-keyboard/super_8.png" action="xkeysym:eightsuperior" />
<mod2 display="image:/usr/share/matchbox-keyboard/sub_8.png" action="xkeysym:eightsubscript" />
<mod3 display="f8" action="f8" />
</key>
<key>
<default display="9" />
<shifted display="(" />
<mod1 display="image:/usr/share/matchbox-keyboard/super_9.png" action="xkeysym:ninesuperior" />
<mod2 display="image:/usr/share/matchbox-keyboard/sub_9.png" action="xkeysym:ninesubscript" />
<mod3 display="f9" action="f9" />
</key>
<key>
<default display="0" />
<shifted display=")" />
<mod1 display="image:/usr/share/matchbox-keyboard/super_0.png" action="xkeysym:zerosuperior" />
<mod2 display="image:/usr/share/matchbox-keyboard/sub_0.png" action="xkeysym:zerosubscript" />
<mod3 display="f10" action="f10" />
</key>
<key>
<default display="-" />
<shifted display="_" />
<mod1 display="image:/usr/share/matchbox-keyboard/super_minus.png" action="¯" />
<mod2 display="image:/usr/share/matchbox-keyboard/sub_minus.png" action="₋" />
<mod3 display="f11" action="f11" />
</key>
<key>
<default display="=" />
<shifted display="+" />
<mod1 display="×" />
<mod2 display="÷" />
<mod3 display="f12" action="f12" />
</key>
<key extended="true">
<default display="≠" />
<shifted display="±" />
<mod1 display="image:/usr/share/matchbox-keyboard/super_plus.png" action="⁺" />
<mod2 display="image:/usr/share/matchbox-keyboard/sub_plus.png" action="₊" />
<mod3 display="¬" />
</key>
<space width="50" extended="true" />
<key width="1000" fill="true">
<default display="⇦" action="backspace" />
<shifted display="⇨" action="delete" />
<mod1 display="image:/usr/share/matchbox-keyboard/arrow.png" action="Undo" />
<mod2 display="image:/usr/share/matchbox-keyboard/arrow.png" action="Redo" />
</key>
</row>
<row>
<key width="1250" fill="true">
<default display="image:/usr/share/matchbox-keyboard/arrows.png" action="tab" />
</key>
<key obey-caps="true">
<default display="q" />
<shifted display="Q" />
<mod1 display="à" action="xkeysym:agrave" />
<mod2 display="À" action="xkeysym:Agrave" />
<mod3 display="¹" />
</key>
<key obey-caps="true">
<default display="w" />
<shifted display="W" />
<mod1 display="á" action="xkeysym:aacute" />
<mod2 display="Á" action="xkeysym:Aacute" />
<mod3 display="²" />
</key>
<key obey-caps="true">
<default display="e" />
<shifted display="E" />
<mod1 display="â" action="xkeysym:acircumflex" />
<mod2 display="Â" action="xkeysym:Acircumflex" />
<mod3 display="³" />
</key>
<key obey-caps="true">
<default display="r" />
<shifted display="R" />
<mod1 display="ä" action="xkeysym:adiaeresis" />
<mod2 display="Ä" action="xkeysym:Adiaeresis" />
<mod3 display="∞" />
</key>
<key obey-caps="true">
<default display="t" />
<shifted display="T" />
<mod1 display="ã" action="xkeysym:atilde" />
<mod2 display="Ã" action="xkeysym:Atilde" />
<mod3 display="‰" />
</key>
<key obey-caps="true">
<default display="y" />
<shifted display="Y" />
<mod1 display="å" action="xkeysym:aring" />
<mod2 display="Å" action="xkeysym:Aring" />
<mod3 display="½" />
</key>
<key obey-caps="true">
<default display="u" />
<shifted display="U" />
<mod1 display="æ" action="xkeysym:ae" />
<mod2 display="Æ" action="xkeysym:AE" />
<mod3 display="¼" />
</key>
<key obey-caps="true">
<default display="i" />
<shifted display="I" />
<mod1 display="ç" action="xkeysym:ccedilla" />
<mod2 display="Ç" action="xkeysym:Ccedilla" />
<mod3 display="¾" />
</key>
<key obey-caps="true">
<default display="o" />
<shifted display="O" />
<mod1 display="ð" action="xkeysym:eth" />
<mod2 display="Ð" action="xkeysym:ETH" />
<mod3 display="º" />
</key>
<key obey-caps="true">
<default display="p" />
<shifted display="P" />
<mod1 display="è" action="xkeysym:egrave" />
<mod2 display="È" action="xkeysym:Egrave" />
<mod3 display="" />
</key>
<key>
<default display="[" />
<shifted display="{" />
<mod1 display="é" action="xkeysym:eacute" />
<mod2 display="É" action="xkeysym:Eacute" />
<mod3 display="" />
</key>
<key>
<default display="]" />
<shifted display="}" />
<mod1 display="ê" action="xkeysym:ecircumflex" />
<mod2 display="Ê" action="xkeysym:Ecircumflex" />
<mod3 display="" />
</key>
<key>
<default display="\" />
<shifted display="|" />
<mod1 display="ë" action="xkeysym:ediaeresis" />
<mod2 display="Ë" action="xkeysym:Ediaeresis" />
<mod3 display="" />
</key>
<key extended="true">
<default display="…" />
<shifted display="¦" />
<mod1 display="ì" action="xkeysym:igrave" />
<mod2 display="Ì" action="xkeysym:Igrave" />
<mod3 display="→" />
</key>
<key extended="true">
<default display="¤" />
<shifted display="¢" />
<mod1 display="€" />
<mod2 display="¥" />
<mod3 display="£" />
</key>
</row>
<row>
<key width="1250" fill="true">
<default display="image:caps.png" action="modifier:caps" />
<shifted display="image:caps_up.png" action="modifier:caps" />
</key>
<key obey-caps="true">
<default display="a" />
<shifted display="A" />
<mod1 display="í" action="xkeysym:iacute" />
<mod2 display="Í" action="xkeysym:Iacute" />
<mod3 display="ª" />
</key>
<key obey-caps="true">
<default display="s" />
<shifted display="S" />
<mod1 display="î" action="xkeysym:icircumflex" />
<mod2 display="Î" action="xkeysym:Icircumflex" />
<mod3 display="ß" />
</key>
<key obey-caps="true">
<default display="d" />
<shifted display="D" />
<mod1 display="ï" action="xkeysym:idiaeresis" />
<mod2 display="Ï" action="xkeysym:Idiaeresis" />
<mod3 display="" />
</key>
<key obey-caps="true">
<default display="f" />
<shifted display="F" />
<mod1 display="ñ" action="xkeysym:ntilde" />
<mod2 display="Ñ" action="xkeysym:Ntilde" />
<mod3 display="ƒ" />
</key>
<key obey-caps="true">
<default display="g" />
<shifted display="G" />
<mod1 display="ò" action="xkeysym:ograve" />
<mod2 display="Ò" action="xkeysym:Ograve" />
<mod3 display="" />
</key>
<key obey-caps="true">
<default display="h" />
<shifted display="H" />
<mod1 display="ó" action="xkeysym:oacute" />
<mod2 display="Ó" action="xkeysym:Oacute" />
<mod3 display="" />
</key>
<key obey-caps="true">
<default display="j" />
<shifted display="J" />
<mod1 display="ô" action="xkeysym:ocircumflex" />
<mod2 display="Ô" action="xkeysym:Ocircumflex" />
<mod3 display="" />
</key>
<key obey-caps="true">
<default display="k" />
<shifted display="K" />
<mod1 display="ö" action="xkeysym:odiaeresis" />
<mod2 display="Ö" action="xkeysym:Odiaeresis" />
<mod3 display="" />
</key>
<key obey-caps="true">
<default display="l" />
<shifted display="L" />
<mod1 display="õ" action="xkeysym:otilde" />
<mod2 display="Õ" action="xkeysym:Otilde" />
<mod3 display="" />
</key>
<key>
<default display=";" />
<shifted display=":" />
<mod1 display="ø" action="xkeysym:oslash" />
<mod2 display="Ø" action="xkeysym:Oslash" />
<mod3 display="" />
</key>
<key>
<default display="'" />
<shifted display='"' />
<mod1 display="œ" />
<mod2 display="Œ" />
<mod3 display="" />
</key>
<key extended="true">
<default display="¶" />
<shifted display="§" />
<mod1 display="·" />
<mod2 display="•" />
<mod3 display="" />
</key>
<key width="2000" fill="true">
<default display="⏎" action="return" />
<mod1 display="lf" action="linefeed" />
</key>
</row>
<row>
<key width="1500" fill="true">
<default display="⇧" action="modifier:shift" />
<caps display="⇪⇪" action="modifier:shift" />
</key>
<key obey-caps="true">
<default display="z" />
<shifted display="Z" />
<mod1 display="ž" />
<mod2 display="Ž" />
<mod3 display="" />
</key>
<key obey-caps="true">
<default display="x" />
<shifted display="X" />
<mod1 display="š" />
<mod2 display="Š" />
<mod3 display="" />
</key>
<key obey-caps="true">
<default display="c" />
<shifted display="C" />
<mod1 display="þ" action="xkeysym:thorn" />
<mod2 display="Þ" action="xkeysym:THORN" />
<mod3 display="" />
</key>
<key obey-caps="true">
<default display="v" />
<shifted display="V" />
<mod1 display="ù" action="xkeysym:ugrave" />
<mod2 display="Ù" action="xkeysym:Ugrave" />
<mod3 display="" />
</key>
<key obey-caps="true">
<default display="b" />
<shifted display="B" />
<mod1 display="ú" action="xkeysym:uacute" />
<mod2 display="Ú" action="xkeysym:Uacute" />
<mod3 display="" />
</key>
<key obey-caps="true">
<default display="n" />
<shifted display="N" />
<mod1 display="û" action="xkeysym:ucircumflex" />
<mod2 display="Û" action="xkeysym:Ucircumflex" />
<mod3 display="" />
</key>
<key obey-caps="true">
<default display="m" />
<shifted display="M" />
<mod1 display="ü" action="xkeysym:udiaeresis" />
<mod2 display="Ü" action="xkeysym:Udiaeresis" />
<mod3 display="μ" action="xkeysym:Greek_mu" />
</key>
<key>
<default display="," />
<shifted display="<" action="xkeysym:less" />
<mod1 display="ý" action="xkeysym:yacute" />
<mod2 display="Ý" action="xkeysym:Yacute" />
<mod3 display="≤" />
</key>
<key>
<default display="." />
<shifted display=">" action="xkeysym:greater" />
<mod1 display="ÿ" />
<mod2 display="Ÿ" />
<mod3 display="≥" />
</key>
<key>
<default display="/" />
<shifted display="?" />
<mod1 display="¿" />
<mod2 display="¡" />
<mod3 display="" />
</key>
<key>
<default display="image:arrow_up.png" action="xkeysym:Up" />
<shifted display="image:arrow_up.png" action="xkeysym:Up" />
<mod1 display="up" action="pageup" />
<mod2 display="image:arrow_up.png" action="xkeysym:Prior" />
</key>
<key extended="true">
<default display="‚" />
<shifted display='„' />
<mod1 display="–" />
<mod2 display="—" />
<mod3 display="-" action="­" />
</key>
<key extended="true">
<default display="‘" />
<shifted display='“' />
<mod1 display="‹" />
<mod2 display="«" />
<mod3 display="√" />
</key>
<key extended="true">
<default display="’" />
<shifted display='”' />
<mod1 display="›" />
<mod2 display="»" />
<mod3 display="∫" />
</key>
<key obey-caps="true" extended="true">
<default display="®" />
<shifted display="©" />
<mod1 display="™" />
<mod2 display="†" />
<mod3 display="‡" />
</key>
</row>
<row>
<key width="750">
<default display="image:arrow_up_1.png" action="modifier:mod1" />
</key>
<key width="750">
<default display="image:/usr/share/matchbox-keyboard/shift_2.png" action="modifier:mod2" />
</key>
<key width="750">
<default display="image:/usr/share/matchbox-keyboard/shift_3.png" action="modifier:mod3" />
</key>
<key width="750">
<default display="al" action="modifier:alt" />
</key>
<key width="750">
<default display="ct" action="modifier:ctrl" />
</key>
<space width="50" extended="true" />
<key width="4600" fill="true">
<default display=" " action="space" />
<mod3 display="nbsp" action=" "/>
</key>
<space width="50" extended="true" />
<key obey-caps="false" extended="true">
<default display="α" action="xkeysym:Greek_alpha" />
<shifted display="β" action="xkeysym:Greek_beta" />
<mod1 display="γ" action="xkeysym:Greek_gamma" />
<mod2 display="Γ" action="xkeysym:Greek_GAMMA" />
<mod3 display="τ" action="xkeysym:Greek_tau" />
</key>
<key>
<default display="image:arrow_left.png" action="xkeysym:Left" />
<shifted display="image:arrow_left.png" action="xkeysym:Left" />
<mod1 display="image:arrow_left.png" action="home" />
<mod2 display="image:arrow_left.png" action="xkeysym:Left" />
</key>
<key>
<default display="image:arrow_down.png" action="xkeysym:Down" />
<shifted display="image:arrow_down.png" action="xkeysym:Down" />
<mod1 display="dn" action="pagedown" />
<mod2 display="image:arrow_down.png" action="xkeysym:Next" />
</key>
<key>
<default display="image:arrow_right.png" action="xkeysym:Right" />
<shifted display="image:arrow_right.png" action="xkeysym:Right" />
<mod1 display="image:arrow_right.png" action="end" />
<mod2 display="image:arrow_right.png" action="xkeysym:Right" />
</key>
<key obey-caps="true" extended="true">
<default display="δ" action="xkeysym:Greek_delta" />
<shifted display="Δ" action="xkeysym:Greek_DELTA" />
<mod1 display="λ" action="xkeysym:Greek_lambda" />
<mod2 display="Λ" />
<mod3 display="ρ" action="xkeysym:Greek_rho" />
</key>
<key obey-caps="true" extended="true">
<default display="σ" action="xkeysym:Greek_sigma" />
<shifted display="Σ" />
<mod1 display="θ" action="xkeysym:Greek_theta" />
<mod2 display="Θ" />
<mod3 display="ϕ" />
</key>
<key obey-caps="true" extended="true">
<default display="π" action="xkeysym:Greek_pi" />
<shifted display="Π" action="xkeysym:Greek_PI" />
<mod1 display="ω" action="xkeysym:Greek_omega" />
<mod2 display="Ω" action="xkeysym:Greek_OMEGA" />
<mod3 display="ε" action="xkeysym:Greek_epsilon" />
</key>
</row>
</layout>
</keyboard>
