diff options
author | Francis Rowe <info@gluglug.org.uk> | 2014-07-20 03:37:00 (EDT) |
---|---|---|
committer | Michał Masłowski <mtjm@mtjm.eu> | 2014-08-22 13:15:07 (EDT) |
commit | 488242eb941305ef61319b8499d4a1e8ccf218a1 (patch) | |
tree | b0347f360df51ac5a8edd06068e7ae24510864d6 | |
parent | 8b484a19b51fb0591d938b3b7cf4fcb8f06c7a2f (diff) | |
download | libreboot-488242eb941305ef61319b8499d4a1e8ccf218a1.zip libreboot-488242eb941305ef61319b8499d4a1e8ccf218a1.tar.gz libreboot-488242eb941305ef61319b8499d4a1e8ccf218a1.tar.bz2 |
Libreboot release 6 beta 3.
- Fixed typo that existed in 2nd beta where the release date of the
2nd beta was listed as being in year 2016, when in actual fact it
was 2014.
- Documentation: added (preliminary) details about (rare) buggy CPU's
on the ThinkPad T60 that were found to fail (instability, kernel
panics, etc) without the microcode updates.
- Documentation: added docs/howtos/x60_heatsink.html for showing how
to change the heatsink on the Thinkpad X60
- Added ROM images for Azerty (French) keyboard layout in GRUB
(courtesy of Olivier Mondoloni)
- Tidied up some scripts:
- Re-factored those scripts (made easier to read/maintain):
build-x60, build-x60t, build-t60, build-macbook21
- Reduced the number of grub configs to 2 (or 1, for macbook21), the
build scripts now generate the other configs at build time.
- Deleted build-x60, build-x60t, build-t60, build-macbook21 and
replaced with intelligent (generic) buildrom-withgrub script
- Updated build to use buildrom-withgrub script for building the ROM
images.
- coreboot.rom and coreboot_serial.rom renamed to
coreboot_usqwerty.rom and coreboot_serial_usqwerty.rom
- coreboot_dvorak and coreboot_serial_dvorak.rom renamed to
coreboot_usdvorak.rom and coreboot_serial_usdvorak.rom
- Renamed coreboot*rom to libreboot*rom
- Made flash, lenovobios_firstflash and lenovobios_secondflash
scripts fail if the specified file does not exist.
- Updated all relevant parts of the documentation to reflect the
above.
- Replaced background.png with background.jpg. added
gnulove.jpg. (resources/grub/background/)
- Updated buildrom-withgrub to use background.jpg instead of
background.png
- Updated buildrom-withgrub to use gnulove.jpg aswell
- Updated resources/grub/config/macbook21/grub*cfg to use gnulove.jpg
background.
- Updated resources/grub/config/{x60,t60,x60t}/grub*cfg to use
background.jpg background.
- Documentation: updated docs/index.html#grub_custom_keyboard to be
more generally useful.
- nvramtool:
- Updated builddeps-coreboot script to build it
- Updated build script to include it in libreboot_bin
- Documentation: added docs/howtos/x60_security.html (security
hardening for X60)
94 files changed, 847 insertions, 2367 deletions
@@ -55,3 +55,7 @@ reported by a user (dmesg for vbios replacement) [ 268.986095] [drm] GMBUS [i915 gmbus dpd] timed out, falling back to bit banging on pin 6 ------------ + + + + @@ -40,8 +40,10 @@ echo "finished running 'make clean' in coreboot" echo "generating grub.elf payload" cd grub +mv ../grub_memdisk_keymap . # Build the GRUB2 payload (grub.elf) -./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o grub.elf --modules='crypto cryptodisk ahci pata ehci uhci ohci usb_keyboard usbms part_msdos xfs ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs minix_be minix minix3_be minix3 minix2_be minix2 zfs ufs2 ufs1_be ufs1 udf squash4 romfs jfs reiserfs procfs odc ntfs nilfs2 newc iso9660 hfsplus cpio exfat cpio_be afs btrfs bfs hfs video_bochs password png keystatus sleep loopback gfxterm_background' --install-modules='syslinuxcfg bsd ls cat echo linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=../resources/grub/config/grub_memdisk.cfg /boot/grub/layouts/dvorak.gkb=../resources/grub/keymap/dvorak.gkb /boot/grub/layouts/ukdvorak.gkb=../resources/grub/keymap/ukdvorak.gkb /boot/grub/layouts/usqwerty.gkb=../resources/grub/keymap/usqwerty.gkb /boot/grub/layouts/ukqwerty.gkb=../resources/grub/keymap/ukqwerty.gkb +./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o grub.elf --modules='crypto cryptodisk ahci pata ehci uhci ohci usb_keyboard usbms part_msdos xfs ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs minix_be minix minix3_be minix3 minix2_be minix2 zfs ufs2 ufs1_be ufs1 udf squash4 romfs jfs reiserfs procfs odc ntfs nilfs2 newc iso9660 hfsplus cpio exfat cpio_be afs btrfs bfs hfs video_bochs password png jpeg keystatus sleep loopback gfxterm_background' --install-modules='syslinuxcfg bsd ls cat echo linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=../resources/grub/config/grub_memdisk.cfg $(./grub_memdisk_keymap) +mv grub_memdisk_keymap ../ # move those into coreboot directory: mv grub.elf ../coreboot @@ -54,25 +56,33 @@ echo "finished generating grub.elf payload" # Build the ROM's (for flashing) # ---------------------------------------------------------------------------------------------------------------------- -echo "building X60 ROM's" -# Build the ROM's for ThinkPad X60 -./build-x60 -echo "finished building X60 ROM's" - -echo "building X60 Tablet ROM's" -# Build the ROM's for ThinkPad X60 Tablet -./build-x60t -echo "finished building X60 Tablet ROM's" - -echo "building T60 ROM's" -# Build the ROM's for ThinkPad T60 (Intel GPU) -./build-t60 -echo "finished building T60 ROM's" - -echo "building MacBook2,1 ROM's" -# Build the ROM's for MacBook2,1 -./build-macbook21 -echo "finished building MacBook2,1 ROM's" +# ROM images for supported Thinkpads +# (x60 also means x60s) +for board in x60 t60 x60t +do + # Build the ROM (with GRUB payload) + ./buildrom-withgrub $board + + # These are needed for the 'bucts' workarounds on X60/T60 + cd bin/$board + for rom in $(find -type f) + do + dd if=$rom of=top64k.bin bs=1 skip=$[$(stat -c %s $rom) - 0x10000] count=64k + dd if=$rom bs=1 skip=$[$(stat -c %s $rom) - 0x20000] count=64k | hexdump + dd if=top64k.bin of=$rom bs=1 seek=$[$(stat -c %s $rom) - 0x20000] count=64k conv=notrunc + rm -rf top64k.bin + done + cd ../../ +done + +# macbook21 doesn't need grub_serial, but the buildrom-withgrub script expects it +# (we will delete it later) +cp resources/grub/config/macbook21/grub_usqwerty.cfg resources/grub/config/macbook21/grub_serial_usqwerty.cfg +# build the ROM +./buildrom-withgrub macbook21 +# delete the useless (nonsensical) files +rm -rf bin/macbook21/libreboot_serial*rom +rm -rf resources/grub/config/macbook21/grub_serial_usqwerty.cfg # Now we prepare libreboot_bin archive ready for release # ---------------------------------------------------------------------------------------------------------------------------- @@ -112,6 +122,9 @@ cp -r docs ../libreboot_bin # X60/T60: BUC.TS utility is needed to flash libreboot while Lenovo BIOS is running cp -r bucts ../libreboot_bin +# Include a copy of nvramtool in libreboot_bin +cp -r coreboot/util/nvramtool ../libreboot_bin + # X60/X60T/T60: Script for setting up powertop (kills high pitched noise) cp powertop.trisquel6 ../libreboot_bin cp powertop.trisquel6.init ../libreboot_bin @@ -146,7 +159,6 @@ echo "finished generating ../libreboot_bin" # Create "libreboot_meta" # ------------------------------------------------------------------------------------------------------------------------------- -# and fast echo "generating ../libreboot_meta" # delete old one diff --git a/build-macbook21 b/build-macbook21 deleted file mode 100755 index 39509e7..0000000 --- a/build-macbook21 +++ /dev/null @@ -1,135 +0,0 @@ -#!/bin/bash - -# build-macbook21: builds's the Apple MacBook2,1 ROM's -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -# DO NOT RUN THIS DIRECTLY! -# Use "build" - -# Build the ROM's (for MacBook2,1): -# ---------------------------------------------------------------------------------------------------------------------- - -# MacBook2,1 uses the same chipsets as the X60/T60 -# Unlike X60/T60, MacBook2,1 has no dock or serial port available -# Therefore, no *_serial_*.rom images will be generated here. - -cd coreboot -rm -rf .config - -# MacBook2,1: prepare coreboot and build it: -cp ../resources/libreboot/config/macbook21config .config -make -cp build/coreboot.rom . -make clean -# MacBook2,1: prepare the ROM's that will have alternative (dvorak) configs inserted -cp coreboot.rom coreboot_dvorak.rom -# MacBook2,1: prepare the ROM's that will have alternative (uk dvorak) configs inserted -cp coreboot.rom coreboot_ukdvorak.rom -# MacBook2,1: prepare the ROM's that will have alternative (uk qwerty) configs inserted -cp coreboot.rom coreboot_ukqwerty.rom -rm -rf .config -rm -rf macbook21 -mkdir macbook21 -# move the ROM's into the newly created x60 directory -mv coreboot*rom macbook21 - -# Insert additional configs and other files into the ROM's: -# --------------------------------------------------------------------------------------------------------------------- - -# MacBook2,1: prepare finished coreboot.rom -# Configuration: US Qwerty keyboard layout in GRUB payload. No MemTest86+. No serial output. (for those without dock). -mv macbook21/coreboot.rom util/cbfstool -cp ../resources/grub/config/macbook21/grub.cfg util/cbfstool -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -mv coreboot.rom ../../macbook21 -rm -rf grub.cfg -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# MacBook2,1: prepare finished coreboot_dvorak.rom -# Configuration: US Dvorak keyboard layout in GRUB payload. No MemTest86+. No serial output. (for those without dock) -mv macbook21/coreboot_dvorak.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/macbook21/grub_dvorak.cfg util/cbfstool/grub.cfg -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -mv coreboot.rom ../../macbook21/coreboot_dvorak.rom -rm -rf grub.cfg -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# MacBook2,1: prepare finished coreboot_ukdvorak.rom -# Configuration: UK Dvorak keyboard layout in GRUB payload. No MemTest86+. No serial output. (for those without dock) -mv macbook21/coreboot_ukdvorak.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/macbook21/grub_ukdvorak.cfg util/cbfstool/grub.cfg -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -mv coreboot.rom ../../macbook21/coreboot_ukdvorak.rom -rm -rf grub.cfg -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# MacBook2,1: prepare finished coreboot_ukqwerty.rom -# Configuration: UK Qwerty keyboard layout in GRUB payload. No MemTest86+. No serial output. (for those without dock) -mv macbook21/coreboot_ukqwerty.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/macbook21/grub_ukqwerty.cfg util/cbfstool/grub.cfg -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -mv coreboot.rom ../../macbook21/coreboot_ukqwerty.rom -rm -rf grub.cfg -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# Now we clean up and prepare the binary archive ready for release. -# ---------------------------------------------------------------------------------------------------------------------------- - -# now we are back in the main coreboot directory - -# MacBook2,1 ROM's: -# delete the old ROM's -rm -rf ../bin/macbook21 -# now put the new ROM's in ./bin -mv macbook21 ../bin - -# go back to main source directory -cd ../ - diff --git a/build-t60 b/build-t60 deleted file mode 100755 index 67d7455..0000000 --- a/build-t60 +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/bash - -# build-t60 script: builds the Lenovo ThinkPad T60 ROM's -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -# DO NOT RUN THIS DIRECTLY! -# Use "build" - -# Build the ROM's (for t60): -# ---------------------------------------------------------------------------------------------------------------------- - -cd coreboot -rm -rf .config - -# ThinkPad t60: prepare coreboot and build it (fast boot, without debugging): -cp ../resources/libreboot/config/t60config .config -make -cp build/coreboot.rom . -make clean -# ThinkPad t60: prepare coreboot and build it (with debugging enabled): -cp coreboot.rom coreboot_serial.rom -# ThinkPad t60: prepare the ROM's that will have alternative (dvorak) configs inserted -cp coreboot.rom coreboot_dvorak.rom -cp coreboot_serial.rom coreboot_serial_dvorak.rom -# ThinkPad t60: prepare the ROM's that will have alternative (uk dvorak) configs inserted -cp coreboot.rom coreboot_ukdvorak.rom -cp coreboot_serial.rom coreboot_serial_ukdvorak.rom -# ThinkPad t60: prepare the ROM's that will have alternative (uk qwerty) configs inserted -cp coreboot.rom coreboot_ukqwerty.rom -cp coreboot_serial.rom coreboot_serial_ukqwerty.rom -rm -rf .config -rm -rf t60 -mkdir t60 -# move the ROM's into the newly created t60 directory -mv coreboot*rom t60 - -# Insert additional configs and other files into the ROM's: -# --------------------------------------------------------------------------------------------------------------------- - -# ThinkPad t60: prepare finished coreboot.rom -# Configuration: US Qwerty keyboard layout in GRUB payload. No MemTest86+. No serial output. (for those without dock). -mv t60/coreboot.rom util/cbfstool -cp ../resources/grub/config/t60/grub.cfg util/cbfstool -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../t60 -rm -rf grub.cfg -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad t60: prepare finished coreboot_dvorak.rom -# Configuration: US Dvorak keyboard layout in GRUB payload. No MemTest86+. No serial output. (for those without dock) -mv t60/coreboot_dvorak.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/t60/grub_dvorak.cfg util/cbfstool/grub.cfg -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../t60/coreboot_dvorak.rom -rm -rf grub.cfg -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad t60: prepare finished coreboot_ukdvorak.rom -# Configuration: UK Dvorak keyboard layout in GRUB payload. No MemTest86+. No serial output. (for those without dock) -mv t60/coreboot_ukdvorak.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/t60/grub_ukdvorak.cfg util/cbfstool/grub.cfg -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../t60/coreboot_ukdvorak.rom -rm -rf grub.cfg -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad t60: prepare finished coreboot_ukqwerty.rom -# Configuration: UK Qwerty keyboard layout in GRUB payload. No MemTest86+. No serial output. (for those without dock) -mv t60/coreboot_ukqwerty.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/t60/grub_ukqwerty.cfg util/cbfstool/grub.cfg -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../t60/coreboot_ukqwerty.rom -rm -rf grub.cfg -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad t60: prepare a finished coreboot_serial.rom -# Configuration: US Qwerty keyboard layout in GRUB payload. MemTest86+ included. Serial output enabled. (for those with dock). -mv t60/coreboot_serial.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/t60/grub_serial.cfg util/cbfstool/grub.cfg -cp ../memtest86+-5.01/memtest util/cbfstool -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f memtest -n memtest -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../t60/coreboot_serial.rom -rm -rf grub.cfg -rm -rf memtest -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad t60: prepare a finished coreboot_serial_dvorak.rom -# Configuration: US Dvorak keyboard layout in GRUB payload. MemTest86+ included. Serial output enabled. (for those with dock) -mv t60/coreboot_serial_dvorak.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/t60/grub_serial_dvorak.cfg util/cbfstool/grub.cfg -cp ../memtest86+-5.01/memtest util/cbfstool -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f memtest -n memtest -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../t60/coreboot_serial_dvorak.rom -rm -rf grub.cfg -rm -rf memtest -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad t60: prepare a finished coreboot_serial_ukdvorak.rom -# Configuration: UK Dvorak keyboard layout in GRUB payload. MemTest86+ included. Serial output enabled. (for those with dock) -mv t60/coreboot_serial_ukdvorak.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/t60/grub_serial_ukdvorak.cfg util/cbfstool/grub.cfg -cp ../memtest86+-5.01/memtest util/cbfstool -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f memtest -n memtest -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../t60/coreboot_serial_ukdvorak.rom -rm -rf grub.cfg -rm -rf memtest -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad t60: prepare a finished coreboot_serial_ukqwerty.rom -# Configuration: UK Qwerty keyboard layout in GRUB payload. MemTest86+ included. Serial output enabled. (for those with dock) -mv t60/coreboot_serial_ukqwerty.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/t60/grub_serial_ukqwerty.cfg util/cbfstool/grub.cfg -cp ../memtest86+-5.01/memtest util/cbfstool -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f memtest -n memtest -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../t60/coreboot_serial_ukqwerty.rom -rm -rf grub.cfg -rm -rf memtest -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# Now we clean up and prepare the binary archive ready for release. -# ---------------------------------------------------------------------------------------------------------------------------- - -# now we are back in the main coreboot directory - -# ThinkPad t60 ROM's: -# delete the old ROM's -rm -rf ../bin/t60 -# now put the new ROM's in ./bin -mv t60 ../bin - -# go back to main source directory -cd ../ - diff --git a/build-x60 b/build-x60 deleted file mode 100755 index 3ce896a..0000000 --- a/build-x60 +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/bash - -# build-x60 script: builds the Lenovo ThinkPad X60 ROM's -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -# DO NOT RUN THIS DIRECTLY! -# Use "build" - -# Build the ROM's (for X60): -# ---------------------------------------------------------------------------------------------------------------------- - -cd coreboot -rm -rf .config - -# ThinkPad X60: prepare coreboot and build it: -cp ../resources/libreboot/config/x60config .config -make -cp build/coreboot.rom . -make clean -# ThinkPad X60: prepare coreboot and build it (with debugging enabled): -cp coreboot.rom coreboot_serial.rom -# ThinkPad X60: prepare the ROM's that will have alternative (dvorak) configs inserted -cp coreboot.rom coreboot_dvorak.rom -cp coreboot_serial.rom coreboot_serial_dvorak.rom -# ThinkPad X60: prepare the ROM's that will have alternative (uk dvorak) configs inserted -cp coreboot.rom coreboot_ukdvorak.rom -cp coreboot_serial.rom coreboot_serial_ukdvorak.rom -# ThinkPad X60: prepare the ROM's that will have alternative (uk qwerty) configs inserted -cp coreboot.rom coreboot_ukqwerty.rom -cp coreboot_serial.rom coreboot_serial_ukqwerty.rom -rm -rf .config -rm -rf x60 -mkdir x60 -# move the ROM's into the newly created x60 directory -mv coreboot*rom x60 - -# Insert additional configs and other files into the ROM's: -# --------------------------------------------------------------------------------------------------------------------- - -# ThinkPad X60: prepare finished coreboot.rom -# Configuration: US Qwerty keyboard layout in GRUB payload. No MemTest86+. No serial output. (for those without dock). -mv x60/coreboot.rom util/cbfstool -cp ../resources/grub/config/x60/grub.cfg util/cbfstool -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../x60 -rm -rf grub.cfg -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad X60: prepare finished coreboot_dvorak.rom -# Configuration: US Dvorak keyboard layout in GRUB payload. No MemTest86+. No serial output. (for those without dock) -mv x60/coreboot_dvorak.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/x60/grub_dvorak.cfg util/cbfstool/grub.cfg -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../x60/coreboot_dvorak.rom -rm -rf grub.cfg -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad X60: prepare finished coreboot_ukdvorak.rom -# Configuration: UK Dvorak keyboard layout in GRUB payload. No MemTest86+. No serial output. (for those without dock) -mv x60/coreboot_ukdvorak.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/x60/grub_ukdvorak.cfg util/cbfstool/grub.cfg -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../x60/coreboot_ukdvorak.rom -rm -rf grub.cfg -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad X60: prepare finished coreboot_ukqwerty.rom -# Configuration: UK Qwerty keyboard layout in GRUB payload. No MemTest86+. No serial output. (for those without dock) -mv x60/coreboot_ukqwerty.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/x60/grub_ukqwerty.cfg util/cbfstool/grub.cfg -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../x60/coreboot_ukqwerty.rom -rm -rf grub.cfg -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad X60: prepare a finished coreboot_serial.rom -# Configuration: US Qwerty keyboard layout in GRUB payload. MemTest86+ included. Serial output enabled. (for those with dock). -mv x60/coreboot_serial.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/x60/grub_serial.cfg util/cbfstool/grub.cfg -cp ../memtest86+-5.01/memtest util/cbfstool -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f memtest -n memtest -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../x60/coreboot_serial.rom -rm -rf grub.cfg -rm -rf memtest -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad X60: prepare a finished coreboot_serial_dvorak.rom -# Configuration: US Dvorak keyboard layout in GRUB payload. MemTest86+ included. Serial output enabled. (for those with dock) -mv x60/coreboot_serial_dvorak.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/x60/grub_serial_dvorak.cfg util/cbfstool/grub.cfg -cp ../memtest86+-5.01/memtest util/cbfstool -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f memtest -n memtest -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../x60/coreboot_serial_dvorak.rom -rm -rf grub.cfg -rm -rf memtest -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad X60: prepare a finished coreboot_serial_ukdvorak.rom -# Configuration: UK Dvorak keyboard layout in GRUB payload. MemTest86+ included. Serial output enabled. (for those with dock) -mv x60/coreboot_serial_ukdvorak.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/x60/grub_serial_ukdvorak.cfg util/cbfstool/grub.cfg -cp ../memtest86+-5.01/memtest util/cbfstool -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f memtest -n memtest -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../x60/coreboot_serial_ukdvorak.rom -rm -rf grub.cfg -rm -rf memtest -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad X60: prepare a finished coreboot_serial_ukqwerty.rom -# Configuration: UK Qwerty keyboard layout in GRUB payload. MemTest86+ included. Serial output enabled. (for those with dock) -mv x60/coreboot_serial_ukqwerty.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/x60/grub_serial_ukqwerty.cfg util/cbfstool/grub.cfg -cp ../memtest86+-5.01/memtest util/cbfstool -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f memtest -n memtest -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../x60/coreboot_serial_ukqwerty.rom -rm -rf grub.cfg -rm -rf memtest -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# Now we clean up and prepare the binary archive ready for release. -# ---------------------------------------------------------------------------------------------------------------------------- - -# now we are back in the main coreboot directory - -# ThinkPad X60 ROM's: -# delete the old ROM's -rm -rf ../bin/x60 -# now put the new ROM's in ./bin -mv x60 ../bin - -# go back to main source directory -cd ../ - diff --git a/build-x60t b/build-x60t deleted file mode 100755 index 4f5db98..0000000 --- a/build-x60t +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/bash - -# build-x60t script: builds the Lenovo ThinkPad X60 Tablet ROM's -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -# DO NOT RUN THIS DIRECTLY! -# Use "build" - -# Build the ROM's (for X60 Tablet): -# ---------------------------------------------------------------------------------------------------------------------- - -cd coreboot -rm -rf .config - -# ThinkPad X60 Tablet: prepare coreboot and build it: -cp ../resources/libreboot/config/x60tconfig .config -make -cp build/coreboot.rom . -make clean -# ThinkPad X60 Tablet: prepare coreboot and build it (with debugging enabled): -cp coreboot.rom coreboot_serial.rom -# ThinkPad X60 Tablet: prepare the ROM's that will have alternative (dvorak) configs inserted -cp coreboot.rom coreboot_dvorak.rom -cp coreboot_serial.rom coreboot_serial_dvorak.rom -# ThinkPad X60 Tablet: prepare the ROM's that will have alternative (uk dvorak) configs inserted -cp coreboot.rom coreboot_ukdvorak.rom -cp coreboot_serial.rom coreboot_serial_ukdvorak.rom -# ThinkPad X60 Tablet: prepare the ROM's that will have alternative (uk qwerty) configs inserted -cp coreboot.rom coreboot_ukqwerty.rom -cp coreboot_serial.rom coreboot_serial_ukqwerty.rom -rm -rf .config -rm -rf x60t -mkdir x60t -# move the ROM's into the newly created x60t directory -mv coreboot*rom x60t - -# Insert additional configs and other files into the ROM's: -# --------------------------------------------------------------------------------------------------------------------- - -# ThinkPad X60 Tablet: prepare finished coreboot.rom -# Configuration: US Qwerty keyboard layout in GRUB payload. No MemTest86+. No serial output. (for those without dock). -mv x60t/coreboot.rom util/cbfstool -cp ../resources/grub/config/x60t/grub.cfg util/cbfstool -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../x60t -rm -rf grub.cfg -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad X60 Tablet: prepare finished coreboot_dvorak.rom -# Configuration: US Dvorak keyboard layout in GRUB payload. No MemTest86+. No serial output. (for those without dock) -mv x60t/coreboot_dvorak.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/x60t/grub_dvorak.cfg util/cbfstool/grub.cfg -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../x60t/coreboot_dvorak.rom -rm -rf grub.cfg -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad X60 Tablet: prepare finished coreboot_ukdvorak.rom -# Configuration: UK Dvorak keyboard layout in GRUB payload. No MemTest86+. No serial output. (for those without dock) -mv x60t/coreboot_ukdvorak.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/x60t/grub_ukdvorak.cfg util/cbfstool/grub.cfg -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../x60t/coreboot_ukdvorak.rom -rm -rf grub.cfg -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad X60 Tablet: prepare finished coreboot_ukqwerty.rom -# Configuration: UK Qwerty keyboard layout in GRUB payload. No MemTest86+. No serial output. (for those without dock) -mv x60t/coreboot_ukqwerty.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/x60t/grub_ukqwerty.cfg util/cbfstool/grub.cfg -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../x60t/coreboot_ukqwerty.rom -rm -rf grub.cfg -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad X60 Tablet: prepare a finished coreboot_serial.rom -# Configuration: US Qwerty keyboard layout in GRUB payload. MemTest86+ included. Serial output enabled. (for those with dock). -mv x60t/coreboot_serial.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/x60t/grub_serial.cfg util/cbfstool/grub.cfg -cp ../memtest86+-5.01/memtest util/cbfstool -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f memtest -n memtest -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../x60t/coreboot_serial.rom -rm -rf grub.cfg -rm -rf memtest -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad X60 Tablet: prepare a finished coreboot_serial_dvorak.rom -# Configuration: US Dvorak keyboard layout in GRUB payload. MemTest86+ included. Serial output enabled. (for those with dock) -mv x60t/coreboot_serial_dvorak.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/x60t/grub_serial_dvorak.cfg util/cbfstool/grub.cfg -cp ../memtest86+-5.01/memtest util/cbfstool -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f memtest -n memtest -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../x60t/coreboot_serial_dvorak.rom -rm -rf grub.cfg -rm -rf memtest -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad X60 Tablet: prepare a finished coreboot_serial_ukdvorak.rom -# Configuration: UK Dvorak keyboard layout in GRUB payload. MemTest86+ included. Serial output enabled. (for those with dock) -mv x60t/coreboot_serial_ukdvorak.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/x60t/grub_serial_ukdvorak.cfg util/cbfstool/grub.cfg -cp ../memtest86+-5.01/memtest util/cbfstool -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f memtest -n memtest -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../x60t/coreboot_serial_ukdvorak.rom -rm -rf grub.cfg -rm -rf memtest -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# ThinkPad X60 Tablet: prepare a finished coreboot_serial_ukqwerty.rom -# Configuration: UK Qwerty keyboard layout in GRUB payload. MemTest86+ included. Serial output enabled. (for those with dock) -mv x60t/coreboot_serial_ukqwerty.rom util/cbfstool/coreboot.rom -cp ../resources/grub/config/x60t/grub_serial_ukqwerty.cfg util/cbfstool/grub.cfg -cp ../memtest86+-5.01/memtest util/cbfstool -cp ../resources/grub/background/background1024x768.png util/cbfstool/background.png -cp ../resources/grub/font/dejavusansmono.pf2 util/cbfstool -cd util/cbfstool -./cbfstool coreboot.rom add -f grub.cfg -n grub.cfg -t raw -./cbfstool coreboot.rom add -f memtest -n memtest -t raw -./cbfstool coreboot.rom add -f background.png -n background.png -t raw -./cbfstool coreboot.rom add -f dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw -./cbfstool coreboot.rom print -dd if=coreboot.rom of=top64k.bin bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x10000] count=64k -dd if=coreboot.rom bs=1 skip=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k | hexdump -dd if=top64k.bin of=coreboot.rom bs=1 seek=$[$(stat -c %s coreboot.rom) - 0x20000] count=64k conv=notrunc -mv coreboot.rom ../../x60t/coreboot_serial_ukqwerty.rom -rm -rf grub.cfg -rm -rf memtest -rm -rf background.png -rm -rf dejavusansmono.pf2 -cd ../../ - -# Now we clean up and prepare the binary archive ready for release. -# ---------------------------------------------------------------------------------------------------------------------------- - -# now we are back in the main coreboot directory - -# ThinkPad X60 Tablet ROM's: -# delete the old ROM's -rm -rf ../bin/x60t -# now put the new ROM's in ./bin -mv x60t ../bin - -# go back to main source directory -cd ../ - diff --git a/builddeps-coreboot b/builddeps-coreboot index 05fba6c..3c4aa2b 100755 --- a/builddeps-coreboot +++ b/builddeps-coreboot @@ -42,6 +42,11 @@ cd util/cbfstool make clean make +# build nvramtool +cd ../nvramtool +make clean +make + # done. go back to coreboot dir cd ../../ diff --git a/buildrom-withgrub b/buildrom-withgrub new file mode 100755 index 0000000..49e3b05 --- /dev/null +++ b/buildrom-withgrub @@ -0,0 +1,135 @@ +#!/bin/bash + +# buildrom-withgrub script: this generically builds the ROM images. +# The ROM images built by this script will use the GRUB payload. +# +# Copyright (C) 2014 Francis Rowe +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +# DO NOT RUN THIS DIRECTLY! +# Use "build" + +# base ROM's: coreboot_usqwerty.rom and coreboot_serial_usqwerty.rom +# All other ROM's will be based on one of these. + +if (( $# != 1 )); then + echo "Usage: ./buildrom-withgrub boardname" + echo "Example: ./buildrom-withgrub x60" + echo "You need to specify exactly 1 argument" + exit +fi + +# Build the ROM images: +# ---------------------------------------------------------------------------------------------------------------------- + +cd coreboot +rm -rf .config + +# cbfstool will be used quite heavily here. +mv util/cbfstool/cbfstool . + +# prepare libreboot configuration and build it +cp ../resources/libreboot/config/$1/config .config + +# coreboot.rom will appear under ./coreboot/build +make + +# move it out (we'll be cleaning the build) +# also rename it to libreboot_usqwerty.rom +mv build/coreboot.rom libreboot_usqwerty.rom + +# clean the build +make clean +rm -rf .config + +# Insert files/configurations and perform operations that are common on all ROM images +# --------------------------------------------------------------------------------------------------------------- + +# Add background image and font +./cbfstool libreboot_usqwerty.rom add -f ../resources/grub/background/background.jpg -n background.jpg -t raw +./cbfstool libreboot_usqwerty.rom add -f ../resources/grub/background/gnulove.jpg -n gnulove.jpg -t raw +./cbfstool libreboot_usqwerty.rom add -f ../resources/grub/font/dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw + +# Insert files/configurations and perform operations that are common on *serial* ROM images +# --------------------------------------------------------------------------------------------------------------- + +# ROM's based on this will have MemTest86+ included inside. +cp libreboot_usqwerty.rom libreboot_serial_usqwerty.rom + +# Add memtest86+ to libreboot_serial_usqwerty.rom +./cbfstool libreboot_serial_usqwerty.rom add -f ../memtest86+-5.01/memtest -n memtest -t raw + +# Prepare ROM's (based on libreboot_usqwerty.rom and libreboot_serial_usqwerty.rom) with +# alternative keyboard layout configurations inside GRUB +# --------------------------------------------------------------------------------------------------------------- + +# The for loops MUST be separate. Do NOT re-factor them! + +# default configs +cp ../resources/grub/config/$1/grub_usqwerty.cfg . +cp ../resources/grub/config/$1/grub_serial_usqwerty.cfg . + +for keymap in $(ls ../resources/grub/keymap/original) +do + # copy the ROM based on the keymap + cp libreboot_usqwerty.rom libreboot_"$keymap".rom + cp libreboot_serial_usqwerty.rom libreboot_serial_"$keymap".rom +done + +for keymap in $(ls ../resources/grub/keymap/original) +do + # copy the config based on the keymap: + cp grub_usqwerty.cfg grub_"$keymap".cfg + cp grub_serial_usqwerty.cfg grub_serial_"$keymap".cfg +done + +for keymap in $(ls ../resources/grub/keymap/original) +do + # Insert GRUB keymap instructions into the config + echo "keymap $keymap" >> grub_"$keymap".cfg + echo "keymap $keymap" >> grub_serial_"$keymap".cfg +done + +for keymap in $(ls ../resources/grub/keymap/original) +do + # Set the GRUB keymap for the given ROM image + ./cbfstool libreboot_"$keymap".rom add -f grub_"$keymap".cfg -n grub.cfg -t raw + ./cbfstool libreboot_serial_"$keymap".rom add -f grub_serial_"$keymap".cfg -n grub.cfg -t raw +done + +# Now we clean up and prepare the binary archive ready for release. +# ---------------------------------------------------------------------------------------------------------------------------- + +# we don't need the grub.cfg's anymore +rm -rf grub*cfg + +# prepare directory for new ROM images +rm -rf $1 +mkdir $1 +# move the ROM's into the newly created directory +mv libreboot*rom $1 + +# delete the old ROM's from ../bin +rm -rf ../bin/$1 +# now put the new ROM's in ./bin +mv $1 ../bin + +# cbfstool no longer needed here, so put it back +mv cbfstool util/cbfstool/ + +# go back to main source directory +cd ../ + diff --git a/docs/RELEASE.html b/docs/RELEASE.html index 7d41aeb..6e12ca7 100644 --- a/docs/RELEASE.html +++ b/docs/RELEASE.html @@ -32,7 +32,7 @@ <h2>Releases</h2> <ul> - <li><a href="#release6">6th release</a> (2014 July 16th, <b>pre-release, 2nd beta</b>)</h1> + <li><a href="#release6">6th release</a> (2014 July 20th, <b>pre-release, 3rd beta</b>)</h1> <li><a href="#release5">5th release</a> (2014 March 7th, revised 2014 June 22nd)</h1> <li><a href="#release4">4th release</a> (2014 February 21st)</h1> <li><a href="#release3">3rd release</a> (2013 December 14th)</h1> @@ -52,18 +52,16 @@ <hr/> - <h1 id="release6">6th release (pre-release, 2nd beta)</h1> + <h1 id="release6">6th release (pre-release, 3rd beta)</h1> <ul> - <li>Released 2014 July 11th (<i>pre-</i>release) <b>1st beta</b></li> - <li>Revised (pre-release, 2nd beta) 2016 July 16th</li> + <li>Released 2014 July 11th (pre-release) 1st beta</li> + <li>Revised (pre-release, 2nd beta) 2014 July 16th</li> + <li>Revised (pre-release, 3rd beta) 2014 July 20th</li> </ul> <div class="important"> <h2>Warning: <u>BETA</u> release! <u>TESTING</u> needed! <u>BUGS</u> present!</h2> - <p> - (the above warning is quite benign. See TODO's) - </p> <p style="font-size:1.2em;"> <b><u><i>If flashing on an X60 then note that you might want to enable wifi and trackpoint after booting libreboot the first time (meaning, **after** you powered off and subsequently booted again). </i></u></b> See <b>docs/index.html#x60_wifi</b> and <b>docs/index.html#x60_trackpoint</b> for how to do that. @@ -72,21 +70,21 @@ <h2>Binaries (for flashing)</h2> <ul> - <li><a href="http://libreboot.org/release/5/prerelease_beta2/libreboot_bin.tar.gz">http://libreboot.org/release/5/prerelease_beta2/libreboot_bin.tar.gz</a></li> - <li><a href="http://libreboot.org/release/5/prerelease_beta2/libreboot_bin.tar.gz.gpg.sig">http://libreboot.org/release/5/prerelease_beta2/libreboot_bin.tar.gz.gpg.sig</a></li> - <li><a href="http://libreboot.org/release/5/prerelease_beta2/libreboot_bin.tar.gz.sha512sum.txt">http://libreboot.org/release/5/prerelease_beta2/libreboot_bin.tar.gz.sha512sum.txt</a></li> + <li><a href="http://libreboot.org/release/5/prerelease_beta3/libreboot_bin.tar.gz">http://libreboot.org/release/5/prerelease_beta3/libreboot_bin.tar.gz</a></li> + <li><a href="http://libreboot.org/release/5/prerelease_beta3/libreboot_bin.tar.gz.gpg.sig">http://libreboot.org/release/5/prerelease_beta3/libreboot_bin.tar.gz.gpg.sig</a></li> + <li><a href="http://libreboot.org/release/5/prerelease_beta3/libreboot_bin.tar.gz.sha512sum.txt">http://libreboot.org/release/5/prerelease_beta3/libreboot_bin.tar.gz.sha512sum.txt</a></li> </ul> <h2>Source code (for hacking)</h2> <ul> - <li><a href="http://libreboot.org/release/5/prerelease_beta2/libreboot_src.tar.gz">http://libreboot.org/release/5/prerelease_beta2/libreboot_src.tar.gz</a></li> - <li><a href="http://libreboot.org/release/5/prerelease_beta2/libreboot_src.tar.gz.gpg.sig">http://libreboot.org/release/5/prerelease_beta2/libreboot_src.tar.gz.gpg.sig</a></li> - <li><a href="http://libreboot.org/release/5/prerelease_beta2/libreboot_src.tar.gz.sha512sum.txt">http://libreboot.org/release/5/prerelease_beta2/libreboot_src.tar.gz.sha512sum.txt</a></li> + <li><a href="http://libreboot.org/release/5/prerelease_beta3/libreboot_src.tar.gz">http://libreboot.org/release/5/prerelease_beta3/libreboot_src.tar.gz</a></li> + <li><a href="http://libreboot.org/release/5/prerelease_beta3/libreboot_src.tar.gz.gpg.sig">http://libreboot.org/release/5/prerelease_beta3/libreboot_src.tar.gz.gpg.sig</a></li> + <li><a href="http://libreboot.org/release/5/prerelease_beta3/libreboot_src.tar.gz.sha512sum.txt">http://libreboot.org/release/5/prerelease_beta3/libreboot_src.tar.gz.sha512sum.txt</a></li> </ul> <h2>Metadata (for re-creating the source archive)</h2> <ul> - <li><a href="http://libreboot.org/release/5/prerelease_beta2/libreboot_meta.tar.gz">http://libreboot.org/release/5/prerelease_beta2/libreboot_meta.tar.gz</a></li> - <li><a href="http://libreboot.org/release/5/prerelease_beta2/libreboot_meta.tar.gz.gpg.sig">http://libreboot.org/release/5/prerelease_beta2/libreboot_meta.tar.gz.gpg.sig</a></li> - <li><a href="http://libreboot.org/release/5/prerelease_beta2/libreboot_meta.tar.gz.sha512sum.txt">http://libreboot.org/release/5/prerelease_beta2/libreboot_meta.tar.gz.sha512sum.txt</a></li> + <li><a href="http://libreboot.org/release/5/prerelease_beta3/libreboot_meta.tar.gz">http://libreboot.org/release/5/prerelease_beta3/libreboot_meta.tar.gz</a></li> + <li><a href="http://libreboot.org/release/5/prerelease_beta3/libreboot_meta.tar.gz.gpg.sig">http://libreboot.org/release/5/prerelease_beta3/libreboot_meta.tar.gz.gpg.sig</a></li> + <li><a href="http://libreboot.org/release/5/prerelease_beta3/libreboot_meta.tar.gz.sha512sum.txt">http://libreboot.org/release/5/prerelease_beta3/libreboot_meta.tar.gz.sha512sum.txt</a></li> </ul> <h2>Machines still supported (compared to previous release):</h2> @@ -125,6 +123,28 @@ T60 15.4" (1280x800 and 1680x1050) with Intel GPU is untested in this pre-release. Not much yet is known about panel names. They will be tested at a later date. </p> + <h2><u>*</u> T60 (microcode): some CPU's might not work (can be replaced)</h2> + <p> + A user with 2 T60's, each with a Core 2 Duo T7200 processor tried libreboot on each machine. + One worked, one did not. It should be explained that in addition to the microcode (on the CPU), + updates are usually supplied in coreboot (from Intel) which patch the onboard microcode to fix bugs. + Errata's can be found at <a href="http://download.intel.com/design/mobile/SPECUPDT/30922214.pdf">http://download.intel.com/design/mobile/SPECUPDT/30922214.pdf</a> + and <a href="http://download.intel.com/design/mobile/SPECUPDT/31407918.pdf">http://download.intel.com/design/mobile/SPECUPDT/31407918.pdf</a>. + These microcode updates are not included in libreboot because they are proprietary (blobs). Most CPU's work fine without them: hundreds + of Core Duo T2300/T2400/T2500/L2300/L2400/L2500 processors have been tested on the X60, and a few T5600 CPU's have been tested on the T60 (and X60 and all work). + In the case of the T7200, it was found that one of the two tested had instability issues (kernel panics) without the updates: work is being done to find out + exactly what version of the microcode that particular CPU had in this case. + If you find that your CPU gives you similar issues (after trying libreboot), the current workaround is to simply try another CPU + (fortunately, the CPU's in the T60 are installed in a socket so replacing them is easy). + </p> + <p> + There might be a patched kernel that can be used, or a kernel parameter that can be used in GRUB to work around these (rare) buggy CPU's + (it is unknown at the moment whether this is possible). + The Core 2 Duo T7600 is untested, but will be tested soon (the lead developer of libreboot project has 3 of them to try out). + </p> + <p> + If reading this for 2nd beta, note that any debugging obtained so far will be included in the 3rd beta. + </p> <h2><u>**</u> Warning: MacBook2,1 <u>UNTESTED</u>!</h2> <p> At the time of this pre-release, MacBook2,1 support is present but untested. I have ordered a MacBook2,1 @@ -145,10 +165,10 @@ <li>X60 now uses a single .config (for coreboot)</li> <li>X60 now uses a single grub.cfg (for grub memdisk)</li> <li>X60 now uses a single grub.elf (payload)</li> - <li>Added new native graphics code for X60 (replaces the old 'replay' code): 5320/9 from review.coreboot.org</li> + <li>Added new native graphics code for X60 (replaces the old 'replay' code) from Vladimir Serbinenko: 5320/9 from review.coreboot.org</li> <li>T60 is now supported, with native graphics. (5345/4 from review.coreboot.org, cherry-picked on top of 5320/9 checkout)</li> <li> - Added macbook2,1 support from review.coreboot.org (see 'getcb' script to know how that was done) + Added macbook2,1 support (from Mono Moosbart and Vladimir Serbinenko) from review.coreboot.org (see 'getcb' script to know how that was done) <ul> <li>Documentation: added information linking to correct page and talking about which models are supported.</li> <li>Added resources/libreboot/config/macbook21config</li> @@ -163,7 +183,7 @@ <li>T60: Copy CD option from the grub.cfg's for T60 *serial*.rom images into the grub configs for non-serial images. (T60's have CD/DVD drive on main laptop)</li> <li>macbook21: remove options in build-macbook21 for *serial*.rom (there is no dock or serial port available for macbook21)</li> <li> - Added patches for backlight controls on X60 and T60 (see ./resources/libreboot/patch/gitdiff and ./getcb and docs/i945_backlight.html) + Added patches for backlight controls on X60 and T60 with help from Denis Carikli (see ./resources/libreboot/patch/gitdiff and ./getcb and docs/i945_backlight.html) <ul> <li>Documentation: added docs/i945_backlight.html showing how backlight controls were made to work on X60/T60</li> </ul> @@ -175,7 +195,7 @@ </ul> </li> <li> - X60/T60: Merged patches for 3D fix when using kernel 3.12 or higher (see ./resources/libreboot/patch/gitdiff and ./getcb) + X60/T60: Merged patches for 3D fix (from Paul Menzel) when using kernel 3.12 or higher (see ./resources/libreboot/patch/gitdiff and ./getcb) <ul> <li>based on 5927/11 and 5932/5 from review.coreboot.org</li> </ul> @@ -332,10 +352,9 @@ <li>Removed instructions for building source code in the 'get' script (they don't really belong there)</li> <li>Added libfuse-dev and liblzma-dev to the list of GRUB dependencies in 'builddeb' script.</li> <li>Converted the 'RELEASE' file to 'docs/RELEASE.html'</li> - <li><b><u><i>TODO:</i></u></b> Add copyright license as appropriate to all of the parts that are mine. (REMOVE THIS LINE WHENDONE)</li> <li>Added those dependencies to builddeb script (for GRUB part): gawk libdevmapper-dev libtool libfreetype6-dev</li> <li>Added to build script the instruction at the end to create a sha512sum.txt with a file manifest plus checksums.</li> - <li>Deleted RELEASE, DEBLOB and BACKPORT file (no longer needed)</li> + <li>Deleted the RELEASE and BACKPORT files (no longer needed)</li> <li> Documentation: added information about X60/T60 dock (ultrabase x6 and advanced mini dock) to relevant sections. <ul> @@ -347,7 +366,56 @@ Revisions for 2nd beta (2014 July 16th) </h2> <ul> - <li>Removed more blobs: Deleted all git files (and added instructions to getcb, for libreboot_meta.tar.gz): removes history of blobs (which itself also showed the patches and therefore the blobs when using 'git diff')</li> + <li> + Deleted all git-related files from the coreboot directory. This was necessary because + with those it is possible to run 'git diff' which shows the changes made in the form + of a patch (diff format); this includes the blobs that were deleted during deblobbing. + </li> + </ul> + + <h2> + Revisions for 3rd beta (2014 July 20th) + </h2> + <ul> + <li> + Fixed typo that existed in 2nd beta where the release date of the 2nd beta was listed as being in year 2016, when in actual fact it was 2014. + </li> + <li> + Documentation: added (preliminary) details about (rare) buggy CPU's on the ThinkPad T60 that were found to fail (instability, kernel panics, etc) + without the microcode updates. + </li> + <li>Documentation: added docs/howtos/x60_heatsink.html for showing how to change the heatsink on the Thinkpad X60</li> + <li>Added ROM images for Azerty (French) keyboard layout in GRUB (courtesy of Olivier Mondoloni)</li> + <li> + Tidied up some scripts: + <ul> + <li><s>Re-factored those scripts (made easier to read/maintain): build-x60, build-x60t, build-t60, build-macbook21</s></li> + <li><s>Reduced the number of grub configs to 2 (or 1, for macbook21), the build scripts now generate the other configs at build time.</s></li> + <li>Deleted build-x60, build-x60t, build-t60, build-macbook21 and replaced with intelligent (generic) buildrom-withgrub script</li> + <li>Updated build to use buildrom-withgrub script for building the ROM images.</li> + <li>coreboot.rom and coreboot_serial.rom renamed to coreboot_usqwerty.rom and coreboot_serial_usqwerty.rom</li> + <li>coreboot_dvorak and coreboot_serial_dvorak.rom renamed to coreboot_usdvorak.rom and coreboot_serial_usdvorak.rom</li> + <li>Renamed coreboot*rom to libreboot*rom</li> + <li>Made flash, lenovobios_firstflash and lenovobios_secondflash scripts fail if the specified file does not exist.</li> + <li>Updated all relevant parts of the documentation to reflect the above.</li> + </ul> + </li> + <li>Replaced background.png with background.jpg. added gnulove.jpg. (resources/grub/background/)</li> + <li>Updated buildrom-withgrub to use background.jpg instead of background.png</li> + <li>Updated buildrom-withgrub to use gnulove.jpg aswell</li> + <li>Updated resources/grub/macbook21/grub*cfg to use gnulove.jpg background.</li> + <li>Updated resources/grub/{x60,t60,x60t}/grub*cfg to use background.jpg background.</li> + <li>Documentation: updated docs/index.html#grub_custom_keyboard to be more generally useful.</li> + <li> + nvramtool: + <ul> + <li>Updated builddeps-coreboot script to build it</li> + <li>Updated build script to include it in libreboot_bin</li> + </ul> + </li> + <li> + Documentation: added docs/howtos/x60_security.html (security hardening for X60) + </li> </ul> <div class="important"> @@ -375,17 +443,14 @@ </li> </ul> </li> + <li><b><u><i>TODO:</i></u></b> T60: find (for rare buggy CPU's that are unstable without microcode updates) if there is a workaround (patched kernel, special parameter, etc)</li> <li><b><u><i>TODO:</i></u></b> Modify coreboot so that tft_brightness is 0xff by default (for fixing the looping issue automatically)</li> <li><b><u><i>TODO:</i></u></b> Modify the Kconfig options in coreboot so that the (non-existent, deleted) microcode is never loaded when building.</li> <li><b><u><i>TODO:</i></u></b> Ask Mono what license he wants to use for his pages (see notes in docs/index.html#macbook21) and then include a copy in the relevant part of the documentation. (note: the backups are not included for now, for this exact reason)</li> <li><b><u><i>TODO:</i></u></b> Retroactively GPG-sign the final revisions of each previous release. (SHA512 sums aswell).</li> <li><b><u><i>TODO:</i></u></b> For the gitdiff in resources/libreboot/patch, re-implement those changes as actual commits in git, using separate patch files for each change.</li> - <li><b><u><i>TODO:</i></u></b> Start GPG signing the release archives.</li> <li><b><u><i>TODO:</i></u></b> Made the lenovobios_firstflash and lenovobios_secondflash scripts safer to use (checking for unintended errors, bad checksums and so on)</li> - <li><b><u><i>TODO:</i></u></b> cbfstool/flashrom/bucts: Investigate that idea: https://wiki.debian.org/HowToPackageForDebian (make a package for Trisquel 6 for cbfstool) (distributing a .deb for Trisquel 6)</li> - <li><b><u><i>TODO:</i></u></b> Added instructions to builddeps-cbfstool to fail if it detects that it is being executed from anywhere other than libreboot_bin</li> <li><b><u><i>TODO:</i></u></b> Tested all of the remaining untested LCD panels under docs/index.html#supported_t60_list</li> - <li><b><u><i>TODO:</i></u></b> Documentation: start translating the documentations into other languages aswell.</li> <li><b><u><i>TODO:</i></u></b> macbook21: from what I can tell, macbook21 has no dock or serial. investigate usbdebug and spkmodem option.</li> <li><b><u><i>TODO:</i></u></b> Documentation: Added macbook2,1 unbricking tutorial.</li> <li><b><u><i>TODO:</i></u></b> Documentation: macbook2,1: Show how to physically remove the built-in webcam (which doesn't work unless you install a non-free driver)</li> @@ -406,22 +471,13 @@ </ul> </li> <li><b><u><i>TODO:</i></u></b> Documentation: Added (replicated) the same level of logs (from default firmware) that Mono did for macbook21, for t60/x60/x60t</li> - <li><b><u><i>TODO:</i></u></b> macbook21: make it's grub.cfg's use a background1280x800.png instead, because macbook21 uses this 16:10 resolution instead of 4:3</li> <li><b><u><i>TODO:</i></u></b> Documentation: Write documentation showing how to install a GNU/Linux distribution on a macbook2,1 while stock (non-free) firmware is running.</li> <li><b><u><i>TODO:</i></u></b> macbook21: Added script 'macbook21_firstflash' for flashing libreboot while Apple EFI firmware is running.</li> <li><b><u><i>TODO:</i></u></b> Documentation: macbook21: added software-based flashing instructions for flashing libreboot while Apple EFI firmware is running.</li> <li><b><u><i>TODO:</i></u></b> Documentation: updated the X60 unbrick tutorial to use the 5-pin method instead (safer / less dangerous).</li> - <li><b><u><i>TODO:</i></u></b> X60/X60s: create new x60sconfig in resources/libreboot/config</li> - <li><b><u><i>TODO:</i></u></b> Added script build-x60s which puts it's ROM's in bin/x60s and uses resources/libreboot/config/x60sconfig (still uses resources/grub/config/*)</li> - <li><b><u><i>TODO:</i></u></b> Added ./build-x60s instruction to build script</li> <li><b><u><i>TODO:</i></u></b> Documentation: added unbricking tutorial for T60</li> <li><b><u><i>TODO:</i></u></b> Documentation: Advise what parts of the unbricking tutorial to follow (or skip) for replacing motherboard</li> <li><b><u><i>TODO:</i></u></b> Documentation: X60/T60: added information about checking custom ROM's using dd to see whether or not the top 64K region is duplicated below top or not. Advise caution about this in the tutorial that deals with flashing on top of Lenovo BIOS, citing the correct dd commands necessary if it is confirmed that the ROM has not been applied with dd yet. (in the case that the user compiled their own ROM's from libreboot, without using the build scripts, or if they forgot to use dd, etc).</li> - <li><b><u><i>TODO:</i></u></b> Updated 'build' script to include coreboot/util/nvramtool source directory as 'nvramtool_standalone' directory in libreboot_bin</li> - <li><b><u><i>TODO:</i></u></b> Added 'builddeps-nvramtool' for building nvramtool (for libreboot_bin, not src) standalone, which does 'make' in libreboot_bin/nvramtool_standalone then puts the nvramtool executable in libreboot_bin/ and then does 'make clean' in libreboot_bin/nvramtool_standalone/.</li> - <li><b><u><i>TODO:</i></u></b> Updated 'build' script to include 'builddeps-nvramtool' in libreboot_bin</li> - <li><b><u><i>TODO:</i></u></b> Updated 'build' script to include X60/T60/macbook21 cmos.layout files (from libreboot_src/coreboot/src/mainboard/oem/board/) in libreboot_bin, for use with nvramtool</li> - <li><b><u><i>TODO:</i></u></b> Documentation: updated the relevant parts that use nvramtool to mention the new 'builddeps-nvramtool' and the cmos.layout files in libreboot_bin. Emphasize that this is for libreboot_bin and not libreboot_src</li> <li><b><u><i>TODO:</i></u></b> Documentation: Add a "development guide" for how to maintain libreboot ('get' scripts, deblob scripts, associated files under ./resources and so on)</li> <li> <b><u><i>TODO:</i></u></b> Investigate high boot speeds on X60/T60/macbook21 diff --git a/docs/howtos/grub_cbfs.html b/docs/howtos/grub_cbfs.html index 8446686..d95904d 100644 --- a/docs/howtos/grub_cbfs.html +++ b/docs/howtos/grub_cbfs.html @@ -29,7 +29,7 @@ </p> <p> - A coreboot or libreboot ROM is not simply "flat"; there is an actual filesystem inside called CBFS (coreboot filesystem). A utility called 'cbfstool' + A libreboot (or coreboot) ROM is not simply "flat"; there is an actual filesystem inside called CBFS (coreboot filesystem). A utility called 'cbfstool' allows you to change the contents of the ROM. In this case, libreboot is configured such that the grub.cfg exists directly inside CBFS instead of inside the grub.elf payload's 'memdisk' (which is itself stored in CBFS). </p> @@ -61,30 +61,30 @@ <p> You can work directly with one of the ROM's already included in libreboot_bin.tar.gz. For the purpose of this tutorial it is assumed - that your ROM is named 'coreboot.rom' so please make sure to adapt. + that your ROM is named 'libreboot_usqwerty.rom' so please make sure to adapt. </p> <p> If you want to re-use the ROM that you currently have flashed (and running) then see <a href="../index.html#build_flashrom">../index.html#build_flashrom</a> and then run:<br/> - <b>$ sudo ./flashrom -p internal -r coreboot.rom</b><br/> - Notice that this is using <b>"-r"</b> (read) instead of <b>"-w"</b> (write). This will create a dump (copy) of your current firmware and name it <b>coreboot.rom</b>. You need to take ownership of the file. For example:<br/> - <b>$ sudo chown yourusername:yourusername coreboot.rom</b><br/> - <b># chown yourusername:yourusername coreboot.rom</b> + <b>$ sudo ./flashrom -p internal -r libreboot_usqwerty.rom</b><br/> + Notice that this is using <b>"-r"</b> (read) instead of <b>"-w"</b> (write). This will create a dump (copy) of your current firmware and name it <b>libreboot_usqwerty.rom</b>. You need to take ownership of the file. For example:<br/> + <b>$ sudo chown yourusername:yourusername libreboot_usqwerty.rom</b><br/> + <b># chown yourusername:yourusername libreboot_usqwerty.rom</b> </p> <p> Display contents of ROM:<br/> - <b>$ ./cbfstool coreboot.rom print</b> + <b>$ ./cbfstool libreboot_usqwerty.rom print</b> </p> <p> - The coreboot.rom file contains your grub.cfg. + The libreboot_usqwerty.rom file contains your grub.cfg. </p> <p> Extract grub.cfg from the ROM:<br/> - <b>$ ./cbfstool coreboot.rom extract -n grub.cfg -f grub.cfg</b> + <b>$ ./cbfstool libreboot_usqwerty.rom extract -n grub.cfg -f grub.cfg</b> </p> <p> @@ -93,22 +93,22 @@ <p> Delete the grub.cfg that remained inside the ROM:<br/> - <b>$ ./cbfstool coreboot.rom remove -n grub.cfg</b> + <b>$ ./cbfstool libreboot_usqwerty.rom remove -n grub.cfg</b> </p> <p> Display ROM contents and now you see grub.cfg no longer exists there:<br/> - <b>$ ./cbfstool coreboot.rom print</b> + <b>$ ./cbfstool libreboot_usqwerty.rom print</b> </p> <p> Add the modified version that you just made:<br/> - <b>$ ./cbfstool coreboot.rom add -n grub.cfg -f grub.cfg -t raw</b> + <b>$ ./cbfstool libreboot_usqwerty.rom add -n grub.cfg -f grub.cfg -t raw</b> </p> <p> Now display ROM contents again and see that it exists again:<br/> - <b>$ ./cbfstool coreboot.rom print</b> + <b>$ ./cbfstool libreboot_usqwerty.rom print</b> </p> <p> diff --git a/docs/howtos/x60_heatsink.html b/docs/howtos/x60_heatsink.html new file mode 100644 index 0000000..0feee77 --- /dev/null +++ b/docs/howtos/x60_heatsink.html @@ -0,0 +1,142 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <style type="text/css"> + body { + background:#fff; + color:#000; + font-family:sans-serif; + font-size:1em; + } + </style> + + <title>Libreboot documentation: Switch heatsink on ThinkPad X60</title> +</head> + +<body> + + <header> + <h1>Changing the fan/heatsink on the ThinkPad X60</h1> + <aside>This guide will teach you how to replace the fan and heatsink on your ThinkPad X60.</aside> + </header> + + <p>Or go <a href="../index.html">back to main index</a></p> + + <h2>Table of Contents</h2> + <ul> + <li><a href="#hardware_requirements">Hardware Requirements</a></li> + <li><a href="#software_requirements">Software Requirements</a></li> + <li><a href="#procedure">The procedure</a></li> + </ul> + + <h1 id="hardware_requirements">Hardware requirements</h1> + <ul> + <li>i<b></b>sopr<b></b>opyl <i>alc<b></b>h<i></i>olal</i> (sometimes called rubbing <i>alc<b></b>hole</i>) (cleaning material. DoNotIngest) (typo is intentional, due to fii1illt<a></a>erii1iiing für wörten von Großbritannien und oder nationale iintturnett)</li> + <li>your new fan and/or heatsink</li> + <li>CPU thermal compound (some say Arctic Silver 5 or IC Diamond 7 are good, others are also 'ok')</li> + <li>Something to spread the paste with</li> + </ul> + + <h1 id="software_requirements">Software requirements (for CPU stress testing)</h1> + <ul> + <li>xsensors utility</li> + <li>stress utility</li> + </ul> + + <h1 id="procedure">Disassembly</h1> + <p> + Remove those screws:<br/> + <img src="x60_heatsink/0000.jpg" alt="" /> + </p> + <p> + Push the keyboard forward (carefully):<br/> + <img src="x60_heatsink/0001.jpg" alt="" /> + </p> + <p> + Lift the keyboard up and disconnect it from the board:<br/> + <img src="x60_heatsink/0002.jpg" alt="" /> + </p> + <p> + Grab the right-hand side of the chassis and force it off (gently) and pry up the rest of the chassis:<br/> + <img src="x60_heatsink/0003.jpg" alt="" /> + </p> + <p> + You should now have this:<br/> + <img src="x60_heatsink/0004.jpg" alt="" /> + </p> + <p> + Disconnect the wifi antenna cables, the modem cable and the speaker:<br/> + <img src="x60_heatsink/0005.jpg" alt="" /> + </p> + <p> + Unroute the cables along their path, carefully lifting the tape that holds them in place. Then, disconnect the modem + cable (other end) and power connection and unroute all the cables so that they dangle by the monitor hinge on the right-hand + side:<br/> + <img src="x60_heatsink/0006.jpg" alt="" /> + </p> + <p> + Disconnect the monitor from the motherboard, and unroute the grey antenna cable, carefully lifting the tape + that holds it into place:<br/> + <img src="x60_heatsink/0008.jpg" alt="" /> + </p> + <p> + Carefully lift the remaining tape and unroute the left antenna cable so that it is loose:<br/> + <img src="x60_heatsink/0009.jpg" alt="" /> + </p> + <p> + Remove those screws:<br/> + <img src="x60_heatsink/0011.jpg" alt="" /> + </p> + <p> + Remove those screws:<br/> + <img src="x60_heatsink/0012.jpg" alt="" /> + </p> + <p> + Carefully remove the plate, like so:<br/> + <img src="x60_heatsink/0013.jpg" alt="" /> + </p> + <p> + Remove the SATA connector:<br/> + <img src="x60_heatsink/0014.jpg" alt="" /> + </p> + <p> + Now remove the motherboard (gently) and cast the lcd/chassis aside:<br/> + <img src="x60_heatsink/0015.jpg" alt="" /> + </p> + <p> + Look at that black tape above the heatsink, remove it:<br/> + <img src="x60_heatsink/0016.jpg" alt="" /> + </p> + <p> + Now you have removed it:<br/> + <img src="x60_heatsink/0017.jpg" alt="" /> + </p> + + <p> + Disconnect the fan and remove all the screws, heatsink will easily come off:<br/> + <img src="x60_heatsink/0018.jpg" alt="" /> + </p> + + <p> + Remove the old paste with a cloth (from the CPU and heatsink) and then clean both of them with the <i>alc<a></a>h<b></b>oleel</i> (to remove remaining residue. typo is intentional). + Apply a pea-sized amount of paste to the both chipsets that the heatsink covered and spread it evenly (uniformally). + Finally reinstall the heatsink, reversing previous steps. + </p> + + <p> + <b>stress -c 2</b> command can be used to push the CPU to 100%, and <b>xsensors</b> (or <b>watch sensors</b> command) can be used to monitor heat. + Below 90C is ok. + </p> + +<hr/> + + <p> + Copyright © 2014 Francis Rowe, All Rights Reserved.<br/> + See <a href="../license.html">../license.html</a> for license conditions. + </p> + +</body> +</html> diff --git a/docs/howtos/x60_heatsink/0000.jpg b/docs/howtos/x60_heatsink/0000.jpg Binary files differnew file mode 100644 index 0000000..ce0ec3b --- /dev/null +++ b/docs/howtos/x60_heatsink/0000.jpg diff --git a/docs/howtos/x60_heatsink/0001.jpg b/docs/howtos/x60_heatsink/0001.jpg Binary files differnew file mode 100644 index 0000000..2bbc0ca --- /dev/null +++ b/docs/howtos/x60_heatsink/0001.jpg diff --git a/docs/howtos/x60_heatsink/0002.jpg b/docs/howtos/x60_heatsink/0002.jpg Binary files differnew file mode 100644 index 0000000..b55db3b --- /dev/null +++ b/docs/howtos/x60_heatsink/0002.jpg diff --git a/docs/howtos/x60_heatsink/0003.jpg b/docs/howtos/x60_heatsink/0003.jpg Binary files differnew file mode 100644 index 0000000..c5799ae --- /dev/null +++ b/docs/howtos/x60_heatsink/0003.jpg diff --git a/docs/howtos/x60_heatsink/0004.jpg b/docs/howtos/x60_heatsink/0004.jpg Binary files differnew file mode 100644 index 0000000..cd47840 --- /dev/null +++ b/docs/howtos/x60_heatsink/0004.jpg diff --git a/docs/howtos/x60_heatsink/0005.jpg b/docs/howtos/x60_heatsink/0005.jpg Binary files differnew file mode 100644 index 0000000..418c9d2 --- /dev/null +++ b/docs/howtos/x60_heatsink/0005.jpg diff --git a/docs/howtos/x60_heatsink/0006.jpg b/docs/howtos/x60_heatsink/0006.jpg Binary files differnew file mode 100644 index 0000000..6d36d93 --- /dev/null +++ b/docs/howtos/x60_heatsink/0006.jpg diff --git a/docs/howtos/x60_heatsink/0007.jpg b/docs/howtos/x60_heatsink/0007.jpg Binary files differnew file mode 100644 index 0000000..971ccdf --- /dev/null +++ b/docs/howtos/x60_heatsink/0007.jpg diff --git a/docs/howtos/x60_heatsink/0008.jpg b/docs/howtos/x60_heatsink/0008.jpg Binary files differnew file mode 100644 index 0000000..24e6526 --- /dev/null +++ b/docs/howtos/x60_heatsink/0008.jpg diff --git a/docs/howtos/x60_heatsink/0009.jpg b/docs/howtos/x60_heatsink/0009.jpg Binary files differnew file mode 100644 index 0000000..d318395 --- /dev/null +++ b/docs/howtos/x60_heatsink/0009.jpg diff --git a/docs/howtos/x60_heatsink/0010.jpg b/docs/howtos/x60_heatsink/0010.jpg Binary files differnew file mode 100644 index 0000000..5e6fdc7 --- /dev/null +++ b/docs/howtos/x60_heatsink/0010.jpg diff --git a/docs/howtos/x60_heatsink/0011.jpg b/docs/howtos/x60_heatsink/0011.jpg Binary files differnew file mode 100644 index 0000000..101cf6a --- /dev/null +++ b/docs/howtos/x60_heatsink/0011.jpg diff --git a/docs/howtos/x60_heatsink/0012.jpg b/docs/howtos/x60_heatsink/0012.jpg Binary files differnew file mode 100644 index 0000000..dbb6669 --- /dev/null +++ b/docs/howtos/x60_heatsink/0012.jpg diff --git a/docs/howtos/x60_heatsink/0013.jpg b/docs/howtos/x60_heatsink/0013.jpg Binary files differnew file mode 100644 index 0000000..2d2b9dd --- /dev/null +++ b/docs/howtos/x60_heatsink/0013.jpg diff --git a/docs/howtos/x60_heatsink/0014.jpg b/docs/howtos/x60_heatsink/0014.jpg Binary files differnew file mode 100644 index 0000000..733f997 --- /dev/null +++ b/docs/howtos/x60_heatsink/0014.jpg diff --git a/docs/howtos/x60_heatsink/0015.jpg b/docs/howtos/x60_heatsink/0015.jpg Binary files differnew file mode 100644 index 0000000..1e81166 --- /dev/null +++ b/docs/howtos/x60_heatsink/0015.jpg diff --git a/docs/howtos/x60_heatsink/0016.jpg b/docs/howtos/x60_heatsink/0016.jpg Binary files differnew file mode 100644 index 0000000..ea418a5 --- /dev/null +++ b/docs/howtos/x60_heatsink/0016.jpg diff --git a/docs/howtos/x60_heatsink/0017.jpg b/docs/howtos/x60_heatsink/0017.jpg Binary files differnew file mode 100644 index 0000000..8a67482 --- /dev/null +++ b/docs/howtos/x60_heatsink/0017.jpg diff --git a/docs/howtos/x60_heatsink/0018.jpg b/docs/howtos/x60_heatsink/0018.jpg Binary files differnew file mode 100644 index 0000000..98c43ac --- /dev/null +++ b/docs/howtos/x60_heatsink/0018.jpg diff --git a/docs/howtos/x60_security.html b/docs/howtos/x60_security.html new file mode 100644 index 0000000..fc9cb0b --- /dev/null +++ b/docs/howtos/x60_security.html @@ -0,0 +1,171 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <style type="text/css"> + body { + background:#fff; + color:#000; + font-family:sans-serif; + font-size:1em; + } + </style> + + <title>Libreboot documentation: Security on the ThinkPad X60</title> +</head> + +<body> + + <header> + <h1>Security on the ThinkPad X60</h1> + <aside>Hardware modifications to enhance security on the ThinkPad X60. This tutorial is <b>incomplete</b> at the time of writing.</aside> + </header> + + <p>Or go <a href="../index.html">back to main index</a></p> + + <h2>Table of Contents</h2> + <ul> + <li><a href="#hardware_requirements">Hardware Requirements</a></li> + <li><a href="#software_requirements">Software Requirements</a></li> + <li><a href="#procedure">The procedure</a></li> + </ul> + + <h1 id="hardware_requirements">Hardware requirements</h1> + <ul> + <li>An X60</li> + <li>screwdriver</li> + <li>(in a later version of this tutorial: soldering iron and scalpel)</li> + </ul> + + <h1 id="software_requirements">Software requirements</h1> + <ul> + <li>none (at least in the scope of the article as-is)</li> + </ul> + + <h1 id="procedure">Disassembly</h1> + + <p> + Firstly remove the bluetooth (if your X60 has this):<br/> + The marked screws are underneath those stickers (marked in those 3 locations at the bottom of the LCD assembly):<br/> + <img src="x60_security/0000_bluetooth0.jpg" alt="" /><br/> + Now gently pry off the bottom part of the front bezel, and the bluetooth module is on the left (easily removable):<br/> + <img src="x60_security/0000_bluetooth.jpg" alt="" /><br/> + </p> + + <p> + If your model was WWAN, remove the simcard (check anyway):<br/> + Uncover those 2 screws at the bottom:<br/> + <img src="x60_security/0000_simcard0.jpg" alt="" /><br/> + SIM card is in the marked location:<br/> + <img src="x60_security/0000_simcard1.jpg" alt="" /><br/> + Replacement: USB dongle. + </p> + + <p> + Now get into the motherboard. + </p> + + <p> + Remove those screws:<br/> + <img src="x60_security/0000.jpg" alt="" /> + </p> + <p> + Push the keyboard forward (carefully):<br/> + <img src="x60_security/0001.jpg" alt="" /> + </p> + <p> + Lift the keyboard up and disconnect it from the board:<br/> + <img src="x60_security/0002.jpg" alt="" /> + </p> + <p> + Grab the right-hand side of the chassis and force it off (gently) and pry up the rest of the chassis:<br/> + <img src="x60_security/0003.jpg" alt="" /> + </p> + <p> + You should now have this:<br/> + <img src="x60_security/0004.jpg" alt="" /> + </p> + + <p> + The following is a summary of what you will remove (already done to this machine):<br/> + <img src="x60_security/0001_overview.jpg" alt="" /><br/> + Note: the blue lines represent antenna cables and modem cables. You don't need to remove these, but you can if you want + (to make it tidier after removing other parts). I removed the antenna wires, the modem jack, the modem cable and + also (on another model) a device inside the part where the wwan antenna goes (wasn't sure what it was, but I knew it wasn't needed). <b>This is optional</b> + </p> + + <p> + Remove the microphone (can desolder it, but you can also easily pull it off with you hands). Already removed here:<br/> + <img src="x60_security/0001_microphone.jpg" alt="" /><br/> + We do not know what the built-in microcode (on the CPU) is doing. The theory is that it could be programmed to take commands that do something + and then the CPU returns results. (meaning, remote security hole). So we remove it, just in case.<br/> + Replacement: external microphone on USB or line-in jack. + </p> + + <p> + Remove the modem:<br/> + <img src="x60_security/0001_modem.jpg" alt="" /><br/> + (useless, obsolete device) + </p> + + <p> + Remove the speaker:<br/> + <img src="x60_security/0001_speaker.jpg" alt="" /><br/> + Reason: combined with the microphone issue, this could be used to leak data.<br/> + Replacement: headphones/speakers (line-out) or external DAC (USB). + </p> + + <p> + Remove the wlan (also remove wwan if you have it):<br/> + <img src="x60_security/0001_wlan_wwan.jpg" alt="" /><br/> + Reason: has direct (and very fast) memory access, and could (theoretically) leak data over a side-channel. + </p> + + <h2> + Not covered yet: + </h2> + <ul> + <li>Disable cardbus/pcmcia (has fast/direct memory access)</li> + <li>Disable firewire (has fast/direct memory access)</li> + <li>Disable flashing the ethernet firmware</li> + <li>Disable SPI flash writes (can be re-enabled by unsoldering two parts)</li> + <li>Disable use of xrandr/edid on external monitor (cut 2 pins on VGA)</li> + <li>Disable docking station</li> + </ul> + <p> + Go to <a href="http://media.ccc.de/browse/congress/2013/30C3_-_5529_-_en_-_saal_2_-_201312271830_-_hardening_hardware_and_choosing_a_goodbios_-_peter_stuge.html">http://media.ccc.de/browse/congress/2013/30C3_-_5529_-_en_-_saal_2_-_201312271830_-_hardening_hardware_and_choosing_a_goodbios_-_peter_stuge.html</a> + or directly to the video: <a href="http://mirror.netcologne.de/CCC/congress/2013/webm/30c3-5529-en-Hardening_hardware_and_choosing_a_goodBIOS_webm.webm">http://mirror.netcologne.de/CCC/congress/2013/webm/30c3-5529-en-Hardening_hardware_and_choosing_a_goodBIOS_webm.webm</a>. + </p> + <p> + A lot of this tutorial is based on that video. Look towards the second half of the video to see how to do the abev. + </p> + + <h2> + Also not covered yet: + </h2> + <ul> + <li> + Intrusion detection: randomized seal on screws (need to research) + </li> + <li> + Tips about preventing/mitigating risk of cold boot attack. + </li> + <li> + Software-based security hardening (GRUB trust/cryptomount, kernel LUKS/ecryptfs, etc). + </li> + <li> + General tips/advice and web links showing how to detect physical intrusions. + </li> + </ul> + +<hr/> + + <p> + Copyright © 2014 Francis Rowe, All Rights Reserved.<br/> + See <a href="../license.html">../license.html</a> for license conditions. + </p> + +</body> +</html> diff --git a/docs/howtos/x60_security/0000.jpg b/docs/howtos/x60_security/0000.jpg Binary files differnew file mode 100644 index 0000000..ce0ec3b --- /dev/null +++ b/docs/howtos/x60_security/0000.jpg diff --git a/docs/howtos/x60_security/0000_bluetooth.jpg b/docs/howtos/x60_security/0000_bluetooth.jpg Binary files differnew file mode 100644 index 0000000..94a255f --- /dev/null +++ b/docs/howtos/x60_security/0000_bluetooth.jpg diff --git a/docs/howtos/x60_security/0000_bluetooth0.jpg b/docs/howtos/x60_security/0000_bluetooth0.jpg Binary files differnew file mode 100644 index 0000000..a750b0c --- /dev/null +++ b/docs/howtos/x60_security/0000_bluetooth0.jpg diff --git a/docs/howtos/x60_security/0000_simcard0.jpg b/docs/howtos/x60_security/0000_simcard0.jpg Binary files differnew file mode 100644 index 0000000..40837ea --- /dev/null +++ b/docs/howtos/x60_security/0000_simcard0.jpg diff --git a/docs/howtos/x60_security/0000_simcard1.jpg b/docs/howtos/x60_security/0000_simcard1.jpg Binary files differnew file mode 100644 index 0000000..c0a5b35 --- /dev/null +++ b/docs/howtos/x60_security/0000_simcard1.jpg diff --git a/docs/howtos/x60_security/0001.jpg b/docs/howtos/x60_security/0001.jpg Binary files differnew file mode 100644 index 0000000..2bbc0ca --- /dev/null +++ b/docs/howtos/x60_security/0001.jpg diff --git a/docs/howtos/x60_security/0001_microphone.jpg b/docs/howtos/x60_security/0001_microphone.jpg Binary files differnew file mode 100644 index 0000000..c419060 --- /dev/null +++ b/docs/howtos/x60_security/0001_microphone.jpg diff --git a/docs/howtos/x60_security/0001_modem.jpg b/docs/howtos/x60_security/0001_modem.jpg Binary files differnew file mode 100644 index 0000000..6a7a6a0 --- /dev/null +++ b/docs/howtos/x60_security/0001_modem.jpg diff --git a/docs/howtos/x60_security/0001_overview.jpg b/docs/howtos/x60_security/0001_overview.jpg Binary files differnew file mode 100644 index 0000000..7268e49 --- /dev/null +++ b/docs/howtos/x60_security/0001_overview.jpg diff --git a/docs/howtos/x60_security/0001_speaker.jpg b/docs/howtos/x60_security/0001_speaker.jpg Binary files differnew file mode 100644 index 0000000..28d3ed6 --- /dev/null +++ b/docs/howtos/x60_security/0001_speaker.jpg diff --git a/docs/howtos/x60_security/0001_wlan_wwan.jpg b/docs/howtos/x60_security/0001_wlan_wwan.jpg Binary files differnew file mode 100644 index 0000000..0db858d --- /dev/null +++ b/docs/howtos/x60_security/0001_wlan_wwan.jpg diff --git a/docs/howtos/x60_security/0002.jpg b/docs/howtos/x60_security/0002.jpg Binary files differnew file mode 100644 index 0000000..b55db3b --- /dev/null +++ b/docs/howtos/x60_security/0002.jpg diff --git a/docs/howtos/x60_security/0003.jpg b/docs/howtos/x60_security/0003.jpg Binary files differnew file mode 100644 index 0000000..c5799ae --- /dev/null +++ b/docs/howtos/x60_security/0003.jpg diff --git a/docs/howtos/x60_security/0004.jpg b/docs/howtos/x60_security/0004.jpg Binary files differnew file mode 100644 index 0000000..cd47840 --- /dev/null +++ b/docs/howtos/x60_security/0004.jpg diff --git a/docs/howtos/x60_unbrick.html b/docs/howtos/x60_unbrick.html index 10f66b4..8427c5a 100644 --- a/docs/howtos/x60_unbrick.html +++ b/docs/howtos/x60_unbrick.html @@ -172,7 +172,8 @@ Programmer is now active:<br/> <img src="x60_unbrick/0023.jpg" alt="" /><br/> Now I install flashrom on the T60 (running Trisquel GNU/Linux) and do this:<br/> - <b>flashrom -p buspirate_spi:dev=/dev/ttyUSB0 -w coreboot.rom</b><br/> + <b>flashrom -p buspirate_spi:dev=/dev/ttyUSB0 -w bin/x60/libreboot_usqwerty.rom</b><br/> + Note: there are also other ROM images for X60<br/> Note: this is using buspirate as the programmer, so it is flashing the X60, not the T60!<br/> Here's my terminal window on the T60:<br/> <img src="x60_unbrick/0025.jpg" alt="" /><br/> diff --git a/docs/index.html b/docs/index.html index 8e8f2de..37fdd38 100644 --- a/docs/index.html +++ b/docs/index.html @@ -61,6 +61,8 @@ <li><a href="#supported_t60_list">List of supported ThinkPad T60's</a></li> <li><a href="#t60_inverter">Inverter boards for ThinkPad T60 when upgrading the LCD panel.</a></li> <li><a href="#t60_ati_intel">ThinkPad T60 (ATI GPU) and ThinkPad T60 (Intel GPU) differences.</a></li> + <li><a href="howtos/x60_heatsink.html">ThinkPad X60: change the fan/heatsink</a></li> + <li><a href="howtos/x60_security.html">ThinkPad X60: security</a></li> </ul> <h2>Macbook2,1</h2> @@ -92,13 +94,15 @@ <li><a href="#keyboards_usqwerty">QWERTY (United States)</a></li> <li><a href="#keyboards_ukdvorak">Dvorak (United Kingdom)</a></li> <li><a href="#keyboards_usdvorak">Dvorak (United States)</a></li> + <li><a href="#keyboards_frazerty">AZERTY (French)</a></li> </ul> </li> <li><a href="#grub_custom_keyboard">Custom keyboard layout in GRUB</a></li> <li><a href="#grub_qwerty_keyboard">US Qwerty keyboard layout in GRUB</a></li> <li><a href="#grub_ukqwerty_keyboard">UK Qwerty keyboard layout in GRUB</a></li> <li><a href="#grub_dvorak_keyboard">US Dvorak keyboard layout in GRUB</a></li> - <li><a href="#grub_ukdvorak_keyboard">UK Dvorak layout in GRUB</a></li> + <li><a href="#grub_ukdvorak_keyboard">UK Dvorak keyboard layout in GRUB</a></li> + <li><a href="#grub_frazerty_keyboard">FR AZERTY keyboard layout in GRUB</a></li> </ul> </li> </ul> @@ -301,7 +305,7 @@ </p> <h2 id="config_x60"> - ThinkPad X60 configuration (file: resources/libreboot/config/x60config) + ThinkPad X60 configuration (file: resources/libreboot/config/x60/config) </h2> <ul> <li>General setup / Expert mode = <i>enable</i></li> @@ -328,7 +332,7 @@ <li>Devices / Run Option ROMs on PCI devices = <i>disable</i></li> </ul> <p> - The resulting .config file was saved as resources/libreboot/config/<b>x60config</b> and is used by the build + The resulting .config file was saved as resources/libreboot/config/<b>x60/config</b> and is used by the build scripts for this machine. </p> <p> @@ -340,7 +344,7 @@ </p> <h2 id="config_x60t"> - ThinkPad X60 Tablet configuration (file: resources/libreboot/config/x60tconfig) + ThinkPad X60 Tablet configuration (file: resources/libreboot/config/x60t/config) </h2> <ul> <li>General setup / Expert mode = <i>enable</i></li> @@ -367,7 +371,7 @@ <li>Devices / Run Option ROMs on PCI devices = <i>disable</i></li> </ul> <p> - The resulting .config file was saved as resources/libreboot/config/<b>x60config</b> and is used by the build + The resulting .config file was saved as resources/libreboot/config/<b>x60t/config</b> and is used by the build scripts for this machine. </p> <p> @@ -375,7 +379,7 @@ </p> <h2 id="config_t60"> - ThinkPad T60 configuration (file: resources/libreboot/config/t60config) + ThinkPad T60 configuration (file: resources/libreboot/config/t60/config) </h2> <ul> <li>General setup / Expert mode = <i>enable</i></li> @@ -400,7 +404,7 @@ <li>Devices / Run Option ROMs on PCI devices = <i>disable</i></li> </ul> <p> - The resulting .config file was saved as resources/libreboot/config/<b>t60config</b> and is used by the build + The resulting .config file was saved as resources/libreboot/config/<b>t60/config</b> and is used by the build scripts for this machine. </p> <p> @@ -409,7 +413,7 @@ </p> <h2 id="config_macbook21"> - MacBook2,1 configuration (file: resources/libreboot/config/macbook21config) + MacBook2,1 configuration (file: resources/libreboot/config/macbook21/config) </h2> <ul> <li>General / Expert mode = <i>enable</i></li> @@ -435,7 +439,7 @@ <li>Devices / Run Option ROMs on PCI devices = <i>disable</i></li> </ul> <p> - The resulting .config file was saved as resources/libreboot/config/<b>macbook21config</b> and is used by the build + The resulting .config file was saved as resources/libreboot/config/<b>macbook21/config</b> and is used by the build scripts for this machine. </p> @@ -531,6 +535,30 @@ </li> </ul> + <div class="important"> + <p> + A user with 2 T60's, each with a Core 2 Duo T7200 processor tried libreboot on each machine. + One worked, one did not. It should be explained that in addition to the microcode (on the CPU), + updates are usually supplied in coreboot (from Intel) which patch the onboard microcode to fix bugs. + Errata's can be found at <a href="http://download.intel.com/design/mobile/SPECUPDT/30922214.pdf">http://download.intel.com/design/mobile/SPECUPDT/30922214.pdf</a> + and <a href="http://download.intel.com/design/mobile/SPECUPDT/31407918.pdf">http://download.intel.com/design/mobile/SPECUPDT/31407918.pdf</a>. + These microcode updates are not included in libreboot because they are proprietary (blobs). Most CPU's work fine without them: hundreds + of Core Duo T2300/T2400/T2500/L2300/L2400/L2500 processors have been tested on the X60, and a few T5600 CPU's have been tested on the T60 (and X60 and all work). + In the case of the T7200, it was found that one of the two tested had instability issues (kernel panics) without the updates: work is being done to find out + exactly what version of the microcode that particular CPU had in this case. + If you find that your CPU gives you similar issues (after trying libreboot), the current workaround is to simply try another CPU + (fortunately, the CPU's in the T60 are installed in a socket so replacing them is easy). + </p> + <p> + There might be a patched kernel that can be used, or a kernel parameter that can be used in GRUB to work around these (rare) buggy CPU's + (it is unknown at the moment whether this is possible). + The Core 2 Duo T7600 is untested, but will be tested soon (the lead developer of libreboot project has 3 of them to try out). + </p> + <p> + If reading this for 2nd beta, note that any debugging obtained so far will be included in the 3rd beta. + </p> + </div> + <p> To find what LCD panel you have, see: <a href="#get_edid_panelname">#get_edid_panelname</a>. </p> @@ -785,6 +813,10 @@ </p> <p> + There is a 15.4" T60 with Intel graphics, which might work. (untested at the time of writing). <b>Note to self: REMOVE THIS WHEN TESTED</b>. + </p> + + <p> The following T60 motherboard shows an ATI GPU (<b>do not buy this</b>) (highlighted in red, or on the right next to the white CPU socket), which is unsupported by libreboot:<br/> <img src="howtos/t60_mainboard/t60_ati_gpu.jpg" alt="" /> </p> @@ -900,55 +932,62 @@ <li> ThinkPad X60, X60s (<b>bin/x60/</b>) <ul> - <li>US Qwerty keyboard, no dock: <b>coreboot.rom</b></li> - <li>US Dvorak keyboard, no dock: <b>coreboot_dvorak.rom</b></li> - <li>US Qwerty keyboard, with dock: <b>coreboot_serial.rom</b></li> - <li>US Dvorak keyboard, with dock: <b>coreboot_serial_dvorak.rom</b></li> - <li>UK Qwerty keyboard, no dock: <b>coreboot_ukqwerty.rom</b></li> - <li>UK Dvorak keyboard, no dock: <b>coreboot_ukdvorak.rom</b></li> - <li>UK Qwerty keyboard, with dock: <b>coreboot_serial_ukqwerty.rom</b></li> - <li>UK Dvorak keyboard, with dock: <b>coreboot_serial_ukdvorak.rom</b></li> + <li>US Qwerty keyboard, no dock: <b>libreboot_usqwerty.rom</b></li> + <li>UK Qwerty keyboard, no dock: <b>libreboot_ukqwerty.rom</b></li> + <li>US Dvorak keyboard, no dock: <b>libreboot_usdvorak.rom</b></li> + <li>UK Dvorak keyboard, no dock: <b>libreboot_ukdvorak.rom</b></li> + <li>FR Azerty keyboard, no dock: <b>libreboot_frazerty.rom</b></li> + <li>US Qwerty keyboard, with dock: <b>libreboot_serial_usqwerty.rom</b></li> + <li>UK Qwerty keyboard, with dock: <b>libreboot_serial_ukqwerty.rom</b></li> + <li>US Dvorak keyboard, with dock: <b>libreboot_serial_usdvorak.rom</b></li> + <li>UK Dvorak keyboard, with dock: <b>libreboot_serial_ukdvorak.rom</b></li> + <li>FR Azerty keyboard, with dock: <b>libreboot_serial_frazerty.rom</b></li> </ul> </li> <li> ThinkPad X60 Tablet (<b>bin/x60t/</b>) <ul> - <li>US Qwerty keyboard, no dock: <b>coreboot.rom</b></li> - <li>US Dvorak keyboard, no dock: <b>coreboot_dvorak.rom</b></li> - <li>US Qwerty keyboard, with dock: <b>coreboot_serial.rom</b></li> - <li>US Dvorak keyboard, with dock: <b>coreboot_serial_dvorak.rom</b></li> - <li>UK Qwerty keyboard, no dock: <b>coreboot_ukqwerty.rom</b></li> - <li>UK Dvorak keyboard, no dock: <b>coreboot_ukdvorak.rom</b></li> - <li>UK Qwerty keyboard, with dock: <b>coreboot_serial_ukqwerty.rom</b></li> - <li>UK Dvorak keyboard, with dock: <b>coreboot_serial_ukdvorak.rom</b></li> + <li>US Qwerty keyboard, no dock: <b>libreboot_usqwerty.rom</b></li> + <li>UK Qwerty keyboard, no dock: <b>libreboot_ukqwerty.rom</b></li> + <li>US Dvorak keyboard, no dock: <b>libreboot_usdvorak.rom</b></li> + <li>UK Dvorak keyboard, no dock: <b>libreboot_ukdvorak.rom</b></li> + <li>FR Azerty keyboard, no dock: <b>libreboot_frazerty.rom</b></li> + <li>US Qwerty keyboard, with dock: <b>libreboot_serial_usqwerty.rom</b></li> + <li>UK Qwerty keyboard, with dock: <b>libreboot_serial_ukqwerty.rom</b></li> + <li>US Dvorak keyboard, with dock: <b>libreboot_serial_usdvorak.rom</b></li> + <li>UK Dvorak keyboard, with dock: <b>libreboot_serial_ukdvorak.rom</b></li> + <li>FR Azerty keyboard, with dock: <b>libreboot_serial_frazerty.rom</b></li> </ul> </li> <li> ThinkPad T60 (<b>bin/t60/</b>) (note, see <a href="#supported_t60_list">#supported_t60_list</a>) <ul> - <li>US Qwerty keyboard, no dock: <b>coreboot.rom</b></li> - <li>US Dvorak keyboard, no dock: <b>coreboot_dvorak.rom</b></li> - <li>US Qwerty keyboard, with dock: <b>coreboot_serial.rom</b></li> - <li>US Dvorak keyboard, with dock: <b>coreboot_serial_dvorak.rom</b></li> - <li>UK Qwerty keyboard, no dock: <b>coreboot_ukqwerty.rom</b></li> - <li>UK Dvorak keyboard, no dock: <b>coreboot_ukdvorak.rom</b></li> - <li>UK Qwerty keyboard, with dock: <b>coreboot_serial_ukqwerty.rom</b></li> - <li>UK Dvorak keyboard, with dock: <b>coreboot_serial_ukdvorak.rom</b></li> + <li>US Qwerty keyboard, no dock: <b>libreboot_usqwerty.rom</b></li> + <li>UK Qwerty keyboard, no dock: <b>libreboot_ukqwerty.rom</b></li> + <li>US Dvorak keyboard, no dock: <b>libreboot_usdvorak.rom</b></li> + <li>UK Dvorak keyboard, no dock: <b>libreboot_ukdvorak.rom</b></li> + <li>FR Azerty keyboard, no dock: <b>libreboot_frazerty.rom</b></li> + <li>US Qwerty keyboard, with dock: <b>libreboot_serial_usqwerty.rom</b></li> + <li>UK Qwerty keyboard, with dock: <b>libreboot_serial_ukqwerty.rom</b></li> + <li>US Dvorak keyboard, with dock: <b>libreboot_serial_usdvorak.rom</b></li> + <li>UK Dvorak keyboard, with dock: <b>libreboot_serial_ukdvorak.rom</b></li> + <li>FR Azerty keyboard, with dock: <b>libreboot_serial_frazerty.rom</b></li> </ul> </li> <li> MacBook2,1 (<b>bin/macbook21/</b>) <ul> - <li>US Qwerty keyboard, no dock: <b>coreboot.rom</b></li> - <li>US Dvorak keyboard, no dock: <b>coreboot_dvorak.rom</b></li> - <li>UK Qwerty keyboard, no dock: <b>coreboot_ukqwerty.rom</b></li> - <li>UK Dvorak keyboard, no dock: <b>coreboot_ukdvorak.rom</b></li> - <li>(The MacBook2,1 uses the same chipset, i945, as the X60/X60s X60T and T60 but there is no dock or serial port available for this machine)</li> + <li>US Qwerty keyboard: <b>libreboot_usqwerty.rom</b></li> + <li>UK Qwerty keyboard: <b>libreboot_ukqwerty.rom</b></li> + <li>US Dvorak keyboard: <b>libreboot_usdvorak.rom</b></li> + <li>UK Dvorak keyboard: <b>libreboot_ukdvorak.rom</b></li> + <li>FR Azerty keyboard: <b>libreboot_frazerty.rom</b></li> + <li>The MacBook2,1 uses the same chipset, i945, as the X60/X60s X60T and T60 but there is no dock or serial port available for this machine.</li> </ul> </li> </ul> <p> - This will give you your native keyboard layout in GRUB. The preferences in your OS are not affected, it just makes using + This will give you your native keyboard layout inside GRUB. The preferences in your OS are not affected, it just makes using the GRUB command line easier (if you ever need to do that). <a href="#grub_keyboard">#grub_keyboard</a>shows you how this was done. If your native keyboard layout differs, you can adapt those notes and hack the 'build' script for your needs. @@ -981,8 +1020,6 @@ </div> - <p>(the above message is a lot more benign and a lot less scary than it looks)</p> - <p><b>This is for the ThinkPad X60 and T60 while running Lenovo BIOS. If you already have coreboot or libreboot running, then go to <a href="#flashrom">#flashrom</a> instead!</b></p> @@ -1025,12 +1062,27 @@ </p> <p> - If the above is what you see, then <b>SHUT DOWN</b>. Wait a few seconds, and then boot; libreboot is running, but there is a 2nd procedure needed (see below). + If the above is what you see, then <b>SHUT DOWN</b>. Wait a few seconds, and then boot; libreboot is running, but there is a 2nd procedure <b>*needed*</b> (see below). </p> </div> <p> + <b> + If you boot and you see nothing, try turning up the backlight (Fn+Home). + If this is a ThinkPad X60 and backlight resets to zero when turning it up while at max, look at <a href="#tft_brightness">#tft_brightness</a>. + </b> + </p> + + <p> + <b> + After the 2nd flash, if this is a ThinkPad X60 then you can look at <a href="#x60_wifi">#x60_wifi</a> for how to enable/disable wifi. + You can also look at <a href="#x60_trackpoint">#x60_trackpoint</a> for how to enable/disable the trackpoint (red mouse on keyboard). + You might want to do the 2nd flash first (see below) before doing that. + </b> + </p> + + <p> When you have booted up again:<br/> <b>$ sudo ./lenovobios_secondflash bin/<a href="#rom">YOURBOARD/YOURROM</a></b> </p> @@ -1051,10 +1103,6 @@ </div> - <p> - !!!! - </p> - <p><a href="#pagetop">Back to top of page.</a></p> <hr/> @@ -1094,6 +1142,20 @@ after you see this, and then boot up again after a few seconds. </p> + <p> + <b> + If you boot and you see nothing, try turning up the backlight (Fn+Home). + If this is a ThinkPad X60 and backlight resets to zero when turning it up while at max, look at <a href="#tft_brightness">#tft_brightness</a>. + </b> + </p> + + <p> + <b> + If this is a ThinkPad X60 then you can look at <a href="#x60_wifi">#x60_wifi</a> for how to enable/disable wifi. + You can also look at <a href="#x60_trackpoint">#x60_trackpoint</a> for how to enable/disable the trackpoint (red mouse on keyboard). + </b> + </p> + <p><a href="#pagetop">Back to top of page</a></p> <hr/> @@ -1135,35 +1197,64 @@ <p> Taken from WikiPedia. - See <a href="https://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard">https://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard</a> - and <a href="https://en.wikipedia.org/wiki/QWERTY">https://en.wikipedia.org/wiki/QWERTY</a>. + See <a href="https://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard">https://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard</a>, + <a href="https://en.wikipedia.org/wiki/QWERTY">https://en.wikipedia.org/wiki/QWERTY</a> + and <a href="https://en.wikipedia.org/wiki/AZERTY">https://en.wikipedia.org/wiki/AZERTY</a>. </p> <h3 id="keyboards_ukqwerty">QWERTY (United Kingdom)</h3> - <p> - <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/KB_United_Kingdom.svg/900px-KB_United_Kingdom.svg.png">https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/KB_United_Kingdom.svg/900px-KB_United_Kingdom.svg.png</a> - </p> + <p> + <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/KB_United_Kingdom.svg/900px-KB_United_Kingdom.svg.png">https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/KB_United_Kingdom.svg/900px-KB_United_Kingdom.svg.png</a> + </p> <h3 id="keyboards_usqwerty">QWERTY (United States)</h3> - <p> - <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/5/51/KB_United_States-NoAltGr.svg/900px-KB_United_States-NoAltGr.svg.png">https://upload.wikimedia.org/wikipedia/commons/thumb/5/51/KB_United_States-NoAltGr.svg/900px-KB_United_States-NoAltGr.svg.png</a> - </p> + <p> + <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/5/51/KB_United_States-NoAltGr.svg/900px-KB_United_States-NoAltGr.svg.png">https://upload.wikimedia.org/wikipedia/commons/thumb/5/51/KB_United_States-NoAltGr.svg/900px-KB_United_States-NoAltGr.svg.png</a> + </p> <h3 id="keyboards_ukdvorak">Dvorak (United Kingdom)</h3> + <p> + <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/c/cc/KB_United_Kingdom_Dvorak.svg/900px-KB_United_Kingdom_Dvorak.svg.png">https://upload.wikimedia.org/wikipedia/commons/thumb/c/cc/KB_United_Kingdom_Dvorak.svg/900px-KB_United_Kingdom_Dvorak.svg.png</a> + </p> + + <h3 id="keyboards_usdvorak">Dvorak (United States)</h3> + <p> + <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/2/25/KB_United_States_Dvorak.svg/800px-KB_United_States_Dvorak.svg.png">https://upload.wikimedia.org/wikipedia/commons/thumb/2/25/KB_United_States_Dvorak.svg/800px-KB_United_States_Dvorak.svg.png</a> + </p> + + <h3 id="keyboards_azerty">AZERTY (French)</h3> + <p> + <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b9/KB_France.svg/800px-KB_France.svg.png">https://upload.wikimedia.org/wikipedia/commons/thumb/b/b9/KB_France.svg/800px-KB_France.svg.png</a> + </p> + + <p><a href="#pagetop">Back to top of page</a></p> + + <h2 id="grub_custom_keyboard">Custom keyboard layout in GRUB (for reference)</h2> + <p> - <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/c/cc/KB_United_Kingdom_Dvorak.svg/900px-KB_United_Kingdom_Dvorak.svg.png">https://upload.wikimedia.org/wikipedia/commons/thumb/c/cc/KB_United_Kingdom_Dvorak.svg/900px-KB_United_Kingdom_Dvorak.svg.png</a> + Keymaps are stored in resources/grub/keymap/original (original files) and resources/grub/keymap (.gkb files). </p> - <h3 id="keyboards_usdvorak">Dvorak (United States)</h3> <p> - <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/2/25/KB_United_States_Dvorak.svg/800px-KB_United_States_Dvorak.svg.png">https://upload.wikimedia.org/wikipedia/commons/thumb/2/25/KB_United_States_Dvorak.svg/800px-KB_United_States_Dvorak.svg.png</a> + Example (French Azerty):<br/> + <b>$ ckbcomp fr > frazerty</b><br/><br/> + Go in grub directory:<br/> + <b>cat frazerty | ./grub/grub-mklayout -o frazerty.gkb</b> </p> - <p><a href="#pagetop">Back to top of page</a></p> + <p> + You must make sure that the files are named keymap and keymap.gkb (where 'keymap' can be whatever you want). + </p> - <h2 id="grub_custom_keyboard">Custom keyboard layout in GRUB (for reference)</h2> + <p> + Then from the above example, you would put <b>frazerty</b> in <b>resources/grub/keymap/original/</b> and + the <b>frazerty.gkb</b> file goes under <b>resources/grub/keymap/</b> + </p> - <p>You can adapt the notes below and update the 'build' script to make it build a ROM with your custom/other keyboard layout in GRUB.</p> + <p> + The scripts <b>build</b> and <b>buildrom-withgrub</b> will automatically see this, and automatically build + ROM's with your custom layout (given the name) and include them under bin. Example: <b>libreboot_frazerty.rom</b>. + </p> <p><a href="#pagetop">Back to top of page</a></p> @@ -1210,7 +1301,7 @@ <h2 id="grub_ukdvorak_keyboard">UK Dvorak keyboard layout in GRUB (for reference)</h2> - <p>There isn't much difference.<br/> + <p>There isn't much difference to US Dvorak.<br/> <b>$ cp usdvorak ukdvorak</b></p> <p>Patch ukdvorak like so (diff usdvorak ukdvorak):<br/> @@ -1221,6 +1312,21 @@ <p>Note: these files are already included ('build' script makes use of them). You don't need to do any of this.</p> + <h2 id="grub_frazerty_keyboard">FR AZERTY keyboard layout in GRUB (for reference)</h2> + + <p>How the frazerty.gkb was made (for FR AZERTY layout in GRUB).</p> + + <p><b>$ cd libreboot_src/grub</b><br/> + compile grub ('build' script has the info on how to do this)<br/> + come back out into libreboot_src:<br/> + <b>$ cd ../</b></p> + + <p>Generate the layout file:<br/> + <b>$ ckbcomp fr > frazerty</b><br/> + <b>$ cat frazerty | ./grub/grub-mklayout -o frazerty.gkb</b></p> + + <p>Note: these files are already included ('build' script makes use of them). You don't need to do it.</p> + <p><a href="#pagetop">Back to top of page</a></p> <hr/> @@ -1235,7 +1341,7 @@ <b>$ sudo apt-get install build-essential</b> </p> <p> - Go into the libreboot_src directory. Under coreboot/util/nvramtool/ do that to compile it: + Go into the libreboot_src directory. Under coreboot/util/nvramtool/ do that to compile it:<br/> <b>$ make</b> </p> <p> @@ -1416,6 +1522,10 @@ WantedBy=multi-user.target <pre> Unlisted note: http://inertiawar.com/microcode/ (link published to coreboot mailing list on July 8, 2014) + + This page talks about 'calibration' in powertop: + https://docs.fedoraproject.org/en-US/Fedora/15/html/Power_Management_Guide/PowerTOP.html + I should think about adapting information here based on that page. </pre> <hr/> @@ -27,6 +27,10 @@ if (( $# != 1 )); then echo "You need to specify exactly 1 file" exit fi +if [ ! -f $1 ]; then + echo "File not found!" + exit +fi # boardmismatch=force is for people upgrading from libreboot 5th release, where the new ROM's are "ThinkPad X60 / X60s / X60t" # and the old ones are "ThinkPad X60 / X60s" and flashrom complains otherwise diff --git a/grub_memdisk_keymap b/grub_memdisk_keymap new file mode 100755 index 0000000..09ae4c5 --- /dev/null +++ b/grub_memdisk_keymap @@ -0,0 +1,25 @@ +#!/bin/bash + +# +# lists keymaps +# +# Copyright (C) 2014 Francis Rowe +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +for keymap in $(ls ../resources/grub/keymap/original) +do + printf "/boot/grub/layouts/$keymap.gkb=../resources/grub/keymap/$keymap.gkb " +done diff --git a/lenovobios_firstflash b/lenovobios_firstflash index 2da4427..bcedaf8 100755 --- a/lenovobios_firstflash +++ b/lenovobios_firstflash @@ -29,6 +29,10 @@ if (( $# != 1 )); then echo "You need to specify exactly 1 file" exit fi +if [ ! -f $1 ]; then + echo "File not found!" + exit +fi echo "Don't panic. See docs/index.html for an explanation of what BUC.TS is." diff --git a/lenovobios_secondflash b/lenovobios_secondflash index 521269d..79604e2 100755 --- a/lenovobios_secondflash +++ b/lenovobios_secondflash @@ -29,6 +29,10 @@ if (( $# != 1 )); then echo "You need to specify exactly 1 file" exit fi +if [ ! -f $1 ]; then + echo "File not found!" + exit +fi echo "Don't panic. See docs/index.html for an explanation of what BUC.TS is." diff --git a/resources/grub/background/COPYING b/resources/grub/background/COPYING index 176839e..b916766 100644 --- a/resources/grub/background/COPYING +++ b/resources/grub/background/COPYING @@ -1,3 +1,7 @@ -background1024x768.png is based on https://www.gnu.org/graphics/meditate.xcf.gz +background.jpg is based on https://www.gnu.org/graphics/meditate.xcf.gz which can be found at https://www.gnu.org/graphics/meditate.html Check that webpage for licensing information to see what conditions the image falls under. + +gnulove.jpg based on the image found at https://www.gnu.org/graphics/gnulove.html + +Look at those pages to see what copyright license they fall under. diff --git a/resources/grub/background/background.jpg b/resources/grub/background/background.jpg Binary files differnew file mode 100644 index 0000000..0244adf --- /dev/null +++ b/resources/grub/background/background.jpg diff --git a/resources/grub/background/background1024x768.png b/resources/grub/background/background1024x768.png Binary files differdeleted file mode 100644 index ae13024..0000000 --- a/resources/grub/background/background1024x768.png +++ /dev/null diff --git a/resources/grub/background/gnulove.jpg b/resources/grub/background/gnulove.jpg Binary files differnew file mode 100644 index 0000000..c8bd2ed --- /dev/null +++ b/resources/grub/background/gnulove.jpg diff --git a/resources/grub/config/macbook21/grub.cfg b/resources/grub/config/macbook21/grub.cfg deleted file mode 100644 index 8fc4100..0000000 --- a/resources/grub/config/macbook21/grub.cfg +++ /dev/null @@ -1,57 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -set default="0" -set timeout=1 -set pager=1 - -keymap usqwerty -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/macbook21/grub_ukdvorak.cfg b/resources/grub/config/macbook21/grub_ukdvorak.cfg deleted file mode 100644 index b2075d8..0000000 --- a/resources/grub/config/macbook21/grub_ukdvorak.cfg +++ /dev/null @@ -1,57 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -set default="0" -set timeout=1 -set pager=1 - -keymap ukdvorak -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/macbook21/grub_ukqwerty.cfg b/resources/grub/config/macbook21/grub_ukqwerty.cfg deleted file mode 100644 index b853242..0000000 --- a/resources/grub/config/macbook21/grub_ukqwerty.cfg +++ /dev/null @@ -1,57 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -set default="0" -set timeout=1 -set pager=1 - -keymap ukqwerty -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/x60/grub_dvorak.cfg b/resources/grub/config/macbook21/grub_usqwerty.cfg index 52d12e5..5f52384 100644 --- a/resources/grub/config/x60/grub_dvorak.cfg +++ b/resources/grub/config/macbook21/grub_usqwerty.cfg @@ -21,8 +21,7 @@ set default="0" set timeout=1 set pager=1 -keymap dvorak -background_image (cbfsdisk)/background.png +background_image (cbfsdisk)/gnulove.jpg loadfont (cbfsdisk)/dejavusansmono.pf2 menuentry 'Load Operating System' { diff --git a/resources/grub/config/t60/grub.cfg b/resources/grub/config/t60/grub.cfg deleted file mode 100644 index 2c34f8f..0000000 --- a/resources/grub/config/t60/grub.cfg +++ /dev/null @@ -1,61 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -set default="0" -set timeout=1 -set pager=1 - -keymap usqwerty -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Parse ISOLINUX menu (CD)' { - set root='ata0' - syslinux_configfile -i (ata0)/isolinux/isolinux.cfg -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/t60/grub_serial.cfg b/resources/grub/config/t60/grub_serial.cfg deleted file mode 100644 index bd33753..0000000 --- a/resources/grub/config/t60/grub_serial.cfg +++ /dev/null @@ -1,71 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -# Serial and keyboard configuration, very important. -serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 -terminal_input --append serial -terminal_output --append serial -terminal_input --append at_keyboard #add keyboard support. - -set default="0" -set timeout=1 -set pager=1 - -keymap usqwerty -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Parse ISOLINUX menu (CD)' { - set root='ata0' - syslinux_configfile -i (ata0)/isolinux/isolinux.cfg -} -menuentry 'Load MemTest86+ (serial port, baud 115200)' { - set root='cbfsdisk' - chainloader /memtest -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/t60/grub_serial_ukdvorak.cfg b/resources/grub/config/t60/grub_serial_ukdvorak.cfg deleted file mode 100644 index e52fec5..0000000 --- a/resources/grub/config/t60/grub_serial_ukdvorak.cfg +++ /dev/null @@ -1,71 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -# Serial and keyboard configuration, very important. -serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 -terminal_input --append serial -terminal_output --append serial -terminal_input --append at_keyboard #add keyboard support. - -set default="0" -set timeout=1 -set pager=1 - -keymap ukdvorak -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Parse ISOLINUX menu (CD)' { - set root='ata0' - syslinux_configfile -i (ata0)/isolinux/isolinux.cfg -} -menuentry 'Load MemTest86+ (serial port, baud 115200)' { - set root='cbfsdisk' - chainloader /memtest -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/t60/grub_serial_ukqwerty.cfg b/resources/grub/config/t60/grub_serial_ukqwerty.cfg deleted file mode 100644 index 63aeafe..0000000 --- a/resources/grub/config/t60/grub_serial_ukqwerty.cfg +++ /dev/null @@ -1,71 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -# Serial and keyboard configuration, very important. -serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 -terminal_input --append serial -terminal_output --append serial -terminal_input --append at_keyboard #add keyboard support. - -set default="0" -set timeout=1 -set pager=1 - -keymap ukqwerty -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Parse ISOLINUX menu (CD)' { - set root='ata0' - syslinux_configfile -i (ata0)/isolinux/isolinux.cfg -} -menuentry 'Load MemTest86+ (serial port, baud 115200)' { - set root='cbfsdisk' - chainloader /memtest -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/x60/grub_serial_dvorak.cfg b/resources/grub/config/t60/grub_serial_usqwerty.cfg index 6d49318..34ce198 100644 --- a/resources/grub/config/x60/grub_serial_dvorak.cfg +++ b/resources/grub/config/t60/grub_serial_usqwerty.cfg @@ -27,8 +27,7 @@ set default="0" set timeout=1 set pager=1 -keymap dvorak -background_image (cbfsdisk)/background.png +background_image (cbfsdisk)/background.jpg loadfont (cbfsdisk)/dejavusansmono.pf2 menuentry 'Load Operating System' { diff --git a/resources/grub/config/t60/grub_ukdvorak.cfg b/resources/grub/config/t60/grub_ukdvorak.cfg deleted file mode 100644 index b7c572d..0000000 --- a/resources/grub/config/t60/grub_ukdvorak.cfg +++ /dev/null @@ -1,61 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -set default="0" -set timeout=1 -set pager=1 - -keymap ukdvorak -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Parse ISOLINUX menu (CD)' { - set root='ata0' - syslinux_configfile -i (ata0)/isolinux/isolinux.cfg -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/t60/grub_ukqwerty.cfg b/resources/grub/config/t60/grub_ukqwerty.cfg deleted file mode 100644 index e754843..0000000 --- a/resources/grub/config/t60/grub_ukqwerty.cfg +++ /dev/null @@ -1,61 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -set default="0" -set timeout=1 -set pager=1 - -keymap ukqwerty -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Parse ISOLINUX menu (CD)' { - set root='ata0' - syslinux_configfile -i (ata0)/isolinux/isolinux.cfg -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/t60/grub_dvorak.cfg b/resources/grub/config/t60/grub_usqwerty.cfg index eeb4a97..4fa2e43 100644 --- a/resources/grub/config/t60/grub_dvorak.cfg +++ b/resources/grub/config/t60/grub_usqwerty.cfg @@ -21,8 +21,7 @@ set default="0" set timeout=1 set pager=1 -keymap dvorak -background_image (cbfsdisk)/background.png +background_image (cbfsdisk)/background.jpg loadfont (cbfsdisk)/dejavusansmono.pf2 menuentry 'Load Operating System' { diff --git a/resources/grub/config/x60/grub.cfg b/resources/grub/config/x60/grub.cfg deleted file mode 100644 index 8fc4100..0000000 --- a/resources/grub/config/x60/grub.cfg +++ /dev/null @@ -1,57 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -set default="0" -set timeout=1 -set pager=1 - -keymap usqwerty -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/x60/grub_serial.cfg b/resources/grub/config/x60/grub_serial.cfg deleted file mode 100644 index bd33753..0000000 --- a/resources/grub/config/x60/grub_serial.cfg +++ /dev/null @@ -1,71 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -# Serial and keyboard configuration, very important. -serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 -terminal_input --append serial -terminal_output --append serial -terminal_input --append at_keyboard #add keyboard support. - -set default="0" -set timeout=1 -set pager=1 - -keymap usqwerty -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Parse ISOLINUX menu (CD)' { - set root='ata0' - syslinux_configfile -i (ata0)/isolinux/isolinux.cfg -} -menuentry 'Load MemTest86+ (serial port, baud 115200)' { - set root='cbfsdisk' - chainloader /memtest -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/x60/grub_serial_ukdvorak.cfg b/resources/grub/config/x60/grub_serial_ukdvorak.cfg deleted file mode 100644 index e52fec5..0000000 --- a/resources/grub/config/x60/grub_serial_ukdvorak.cfg +++ /dev/null @@ -1,71 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -# Serial and keyboard configuration, very important. -serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 -terminal_input --append serial -terminal_output --append serial -terminal_input --append at_keyboard #add keyboard support. - -set default="0" -set timeout=1 -set pager=1 - -keymap ukdvorak -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Parse ISOLINUX menu (CD)' { - set root='ata0' - syslinux_configfile -i (ata0)/isolinux/isolinux.cfg -} -menuentry 'Load MemTest86+ (serial port, baud 115200)' { - set root='cbfsdisk' - chainloader /memtest -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/x60/grub_serial_ukqwerty.cfg b/resources/grub/config/x60/grub_serial_ukqwerty.cfg deleted file mode 100644 index 63aeafe..0000000 --- a/resources/grub/config/x60/grub_serial_ukqwerty.cfg +++ /dev/null @@ -1,71 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -# Serial and keyboard configuration, very important. -serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 -terminal_input --append serial -terminal_output --append serial -terminal_input --append at_keyboard #add keyboard support. - -set default="0" -set timeout=1 -set pager=1 - -keymap ukqwerty -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Parse ISOLINUX menu (CD)' { - set root='ata0' - syslinux_configfile -i (ata0)/isolinux/isolinux.cfg -} -menuentry 'Load MemTest86+ (serial port, baud 115200)' { - set root='cbfsdisk' - chainloader /memtest -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/x60t/grub_serial_dvorak.cfg b/resources/grub/config/x60/grub_serial_usqwerty.cfg index 6d49318..34ce198 100644 --- a/resources/grub/config/x60t/grub_serial_dvorak.cfg +++ b/resources/grub/config/x60/grub_serial_usqwerty.cfg @@ -27,8 +27,7 @@ set default="0" set timeout=1 set pager=1 -keymap dvorak -background_image (cbfsdisk)/background.png +background_image (cbfsdisk)/background.jpg loadfont (cbfsdisk)/dejavusansmono.pf2 menuentry 'Load Operating System' { diff --git a/resources/grub/config/x60/grub_ukdvorak.cfg b/resources/grub/config/x60/grub_ukdvorak.cfg deleted file mode 100644 index b2075d8..0000000 --- a/resources/grub/config/x60/grub_ukdvorak.cfg +++ /dev/null @@ -1,57 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -set default="0" -set timeout=1 -set pager=1 - -keymap ukdvorak -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/x60/grub_ukqwerty.cfg b/resources/grub/config/x60/grub_ukqwerty.cfg deleted file mode 100644 index b853242..0000000 --- a/resources/grub/config/x60/grub_ukqwerty.cfg +++ /dev/null @@ -1,57 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -set default="0" -set timeout=1 -set pager=1 - -keymap ukqwerty -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/macbook21/grub_dvorak.cfg b/resources/grub/config/x60/grub_usqwerty.cfg index 52d12e5..cce7a44 100644 --- a/resources/grub/config/macbook21/grub_dvorak.cfg +++ b/resources/grub/config/x60/grub_usqwerty.cfg @@ -21,8 +21,7 @@ set default="0" set timeout=1 set pager=1 -keymap dvorak -background_image (cbfsdisk)/background.png +background_image (cbfsdisk)/background.jpg loadfont (cbfsdisk)/dejavusansmono.pf2 menuentry 'Load Operating System' { diff --git a/resources/grub/config/x60t/grub.cfg b/resources/grub/config/x60t/grub.cfg deleted file mode 100644 index 8fc4100..0000000 --- a/resources/grub/config/x60t/grub.cfg +++ /dev/null @@ -1,57 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -set default="0" -set timeout=1 -set pager=1 - -keymap usqwerty -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/x60t/grub_serial.cfg b/resources/grub/config/x60t/grub_serial.cfg deleted file mode 100644 index bd33753..0000000 --- a/resources/grub/config/x60t/grub_serial.cfg +++ /dev/null @@ -1,71 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -# Serial and keyboard configuration, very important. -serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 -terminal_input --append serial -terminal_output --append serial -terminal_input --append at_keyboard #add keyboard support. - -set default="0" -set timeout=1 -set pager=1 - -keymap usqwerty -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Parse ISOLINUX menu (CD)' { - set root='ata0' - syslinux_configfile -i (ata0)/isolinux/isolinux.cfg -} -menuentry 'Load MemTest86+ (serial port, baud 115200)' { - set root='cbfsdisk' - chainloader /memtest -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/x60t/grub_serial_ukdvorak.cfg b/resources/grub/config/x60t/grub_serial_ukdvorak.cfg deleted file mode 100644 index e52fec5..0000000 --- a/resources/grub/config/x60t/grub_serial_ukdvorak.cfg +++ /dev/null @@ -1,71 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -# Serial and keyboard configuration, very important. -serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 -terminal_input --append serial -terminal_output --append serial -terminal_input --append at_keyboard #add keyboard support. - -set default="0" -set timeout=1 -set pager=1 - -keymap ukdvorak -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Parse ISOLINUX menu (CD)' { - set root='ata0' - syslinux_configfile -i (ata0)/isolinux/isolinux.cfg -} -menuentry 'Load MemTest86+ (serial port, baud 115200)' { - set root='cbfsdisk' - chainloader /memtest -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/x60t/grub_serial_ukqwerty.cfg b/resources/grub/config/x60t/grub_serial_ukqwerty.cfg deleted file mode 100644 index 63aeafe..0000000 --- a/resources/grub/config/x60t/grub_serial_ukqwerty.cfg +++ /dev/null @@ -1,71 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -# Serial and keyboard configuration, very important. -serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 -terminal_input --append serial -terminal_output --append serial -terminal_input --append at_keyboard #add keyboard support. - -set default="0" -set timeout=1 -set pager=1 - -keymap ukqwerty -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Parse ISOLINUX menu (CD)' { - set root='ata0' - syslinux_configfile -i (ata0)/isolinux/isolinux.cfg -} -menuentry 'Load MemTest86+ (serial port, baud 115200)' { - set root='cbfsdisk' - chainloader /memtest -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/t60/grub_serial_dvorak.cfg b/resources/grub/config/x60t/grub_serial_usqwerty.cfg index 6d49318..34ce198 100644 --- a/resources/grub/config/t60/grub_serial_dvorak.cfg +++ b/resources/grub/config/x60t/grub_serial_usqwerty.cfg @@ -27,8 +27,7 @@ set default="0" set timeout=1 set pager=1 -keymap dvorak -background_image (cbfsdisk)/background.png +background_image (cbfsdisk)/background.jpg loadfont (cbfsdisk)/dejavusansmono.pf2 menuentry 'Load Operating System' { diff --git a/resources/grub/config/x60t/grub_ukdvorak.cfg b/resources/grub/config/x60t/grub_ukdvorak.cfg deleted file mode 100644 index b2075d8..0000000 --- a/resources/grub/config/x60t/grub_ukdvorak.cfg +++ /dev/null @@ -1,57 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -set default="0" -set timeout=1 -set pager=1 - -keymap ukdvorak -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/x60t/grub_ukqwerty.cfg b/resources/grub/config/x60t/grub_ukqwerty.cfg deleted file mode 100644 index b853242..0000000 --- a/resources/grub/config/x60t/grub_ukqwerty.cfg +++ /dev/null @@ -1,57 +0,0 @@ -# -# GRUB configuration file which sits inside the root CBFS (coreboot filesystem) -# -# Copyright (C) 2014 Francis Rowe -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -set default="0" -set timeout=1 -set pager=1 - -keymap ukqwerty -background_image (cbfsdisk)/background.png -loadfont (cbfsdisk)/dejavusansmono.pf2 - -menuentry 'Load Operating System' { - linux (ahci0,1)/vmlinuz root=/dev/sda1 - initrd (ahci0,1)/initrd.img -} -menuentry 'Parse ISOLINUX menu (USB)' { - set root='usb0' - syslinux_configfile -i (usb0)/isolinux/isolinux.cfg -} -menuentry 'Search for GRUB configuration on internal storage' { - insmod regexp - insmod ahci - insmod part_msdos - for x in (ahci0,*) ; do - if [ -f "$x/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /grub/grub.cfg - unset superusers - } - fi - if [ -f "$x/boot/grub/grub.cfg" ] ; then - submenu "Load Config from $x" $x { - root=$2 - source /boot/grub/grub.cfg - unset superusers - } - fi - done -} - diff --git a/resources/grub/config/x60t/grub_dvorak.cfg b/resources/grub/config/x60t/grub_usqwerty.cfg index 52d12e5..cce7a44 100644 --- a/resources/grub/config/x60t/grub_dvorak.cfg +++ b/resources/grub/config/x60t/grub_usqwerty.cfg @@ -21,8 +21,7 @@ set default="0" set timeout=1 set pager=1 -keymap dvorak -background_image (cbfsdisk)/background.png +background_image (cbfsdisk)/background.jpg loadfont (cbfsdisk)/dejavusansmono.pf2 menuentry 'Load Operating System' { diff --git a/resources/grub/keymap/dvorak.gkb b/resources/grub/keymap/frazerty.gkb Binary files differindex 41301ef..c048cec 100644 --- a/resources/grub/keymap/dvorak.gkb +++ b/resources/grub/keymap/frazerty.gkb diff --git a/resources/grub/keymap/ukqwerty b/resources/grub/keymap/original/frazerty index 94e5a45..ad7147a 100644 --- a/resources/grub/keymap/ukqwerty +++ b/resources/grub/keymap/original/frazerty @@ -1,22 +1,22 @@ keymaps 0-127 keycode 1 = Escape Escape Escape Escape Escape Escape Escape Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Escape Escape Escape Escape Escape Escape Escape Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Escape Escape Escape Escape Escape Escape Escape Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Escape Escape Escape Escape Escape Escape Escape Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Escape Escape Escape Escape Escape Escape Escape Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Escape Escape Escape Escape Escape Escape Escape Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Escape Escape Escape Escape Escape Escape Escape Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Escape Escape Escape Escape Escape Escape Escape Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape -keycode 2 = U+0031 U+0021 U+00b9 U+00a1 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_one Meta_exclam Meta_one Meta_exclam VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0031 U+0021 U+00b9 U+00a1 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_one Meta_exclam Meta_one Meta_exclam VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0031 U+0021 U+00b9 U+00a1 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_one Meta_exclam Meta_one Meta_exclam VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0031 U+0021 U+00b9 U+00a1 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_one Meta_exclam Meta_one Meta_exclam VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0031 U+0021 U+00b9 U+00a1 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_one Meta_exclam Meta_one Meta_exclam VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0031 U+0021 U+00b9 U+00a1 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_one Meta_exclam Meta_one Meta_exclam VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0031 U+0021 U+00b9 U+00a1 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_one Meta_exclam Meta_one Meta_exclam VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0031 U+0021 U+00b9 U+00a1 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_one Meta_exclam Meta_one Meta_exclam VoidSymbol VoidSymbol VoidSymbol VoidSymbol -keycode 3 = U+0032 U+0022 U+00b2 U+215b nul nul nul nul Meta_two Meta_quotedbl Meta_two Meta_quotedbl Meta_nul Meta_nul Meta_nul Meta_nul U+0032 U+0022 U+00b2 U+215b nul nul nul nul Meta_two Meta_quotedbl Meta_two Meta_quotedbl Meta_nul Meta_nul Meta_nul Meta_nul U+0032 U+0022 U+00b2 U+215b nul nul nul nul Meta_two Meta_quotedbl Meta_two Meta_quotedbl Meta_nul Meta_nul Meta_nul Meta_nul U+0032 U+0022 U+00b2 U+215b nul nul nul nul Meta_two Meta_quotedbl Meta_two Meta_quotedbl Meta_nul Meta_nul Meta_nul Meta_nul U+0032 U+0022 U+00b2 U+215b nul nul nul nul Meta_two Meta_quotedbl Meta_two Meta_quotedbl Meta_nul Meta_nul Meta_nul Meta_nul U+0032 U+0022 U+00b2 U+215b nul nul nul nul Meta_two Meta_quotedbl Meta_two Meta_quotedbl Meta_nul Meta_nul Meta_nul Meta_nul U+0032 U+0022 U+00b2 U+215b nul nul nul nul Meta_two Meta_quotedbl Meta_two Meta_quotedbl Meta_nul Meta_nul Meta_nul Meta_nul U+0032 U+0022 U+00b2 U+215b nul nul nul nul Meta_two Meta_quotedbl Meta_two Meta_quotedbl Meta_nul Meta_nul Meta_nul Meta_nul -keycode 4 = U+0033 U+00a3 U+00b3 U+00a3 Escape Escape Escape Escape Meta_three Meta_three Meta_three Meta_three Meta_Escape Meta_Escape Meta_Escape Meta_Escape U+0033 U+00a3 U+00b3 U+00a3 Escape Escape Escape Escape Meta_three Meta_three Meta_three Meta_three Meta_Escape Meta_Escape Meta_Escape Meta_Escape U+0033 U+00a3 U+00b3 U+00a3 Escape Escape Escape Escape Meta_three Meta_three Meta_three Meta_three Meta_Escape Meta_Escape Meta_Escape Meta_Escape U+0033 U+00a3 U+00b3 U+00a3 Escape Escape Escape Escape Meta_three Meta_three Meta_three Meta_three Meta_Escape Meta_Escape Meta_Escape Meta_Escape U+0033 U+00a3 U+00b3 U+00a3 Escape Escape Escape Escape Meta_three Meta_three Meta_three Meta_three Meta_Escape Meta_Escape Meta_Escape Meta_Escape U+0033 U+00a3 U+00b3 U+00a3 Escape Escape Escape Escape Meta_three Meta_three Meta_three Meta_three Meta_Escape Meta_Escape Meta_Escape Meta_Escape U+0033 U+00a3 U+00b3 U+00a3 Escape Escape Escape Escape Meta_three Meta_three Meta_three Meta_three Meta_Escape Meta_Escape Meta_Escape Meta_Escape U+0033 U+00a3 U+00b3 U+00a3 Escape Escape Escape Escape Meta_three Meta_three Meta_three Meta_three Meta_Escape Meta_Escape Meta_Escape Meta_Escape -keycode 5 = U+0034 U+0024 U+20ac U+00bc Control_backslash Control_backslash Control_backslash Control_backslash Meta_four Meta_dollar Meta_four Meta_dollar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash U+0034 U+0024 U+20ac U+00bc Control_backslash Control_backslash Control_backslash Control_backslash Meta_four Meta_dollar Meta_four Meta_dollar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash U+0034 U+0024 U+20ac U+00bc Control_backslash Control_backslash Control_backslash Control_backslash Meta_four Meta_dollar Meta_four Meta_dollar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash U+0034 U+0024 U+20ac U+00bc Control_backslash Control_backslash Control_backslash Control_backslash Meta_four Meta_dollar Meta_four Meta_dollar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash U+0034 U+0024 U+20ac U+00bc Control_backslash Control_backslash Control_backslash Control_backslash Meta_four Meta_dollar Meta_four Meta_dollar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash U+0034 U+0024 U+20ac U+00bc Control_backslash Control_backslash Control_backslash Control_backslash Meta_four Meta_dollar Meta_four Meta_dollar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash U+0034 U+0024 U+20ac U+00bc Control_backslash Control_backslash Control_backslash Control_backslash Meta_four Meta_dollar Meta_four Meta_dollar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash U+0034 U+0024 U+20ac U+00bc Control_backslash Control_backslash Control_backslash Control_backslash Meta_four Meta_dollar Meta_four Meta_dollar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash -keycode 6 = U+0035 U+0025 U+00bd U+215c Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_five Meta_percent Meta_five Meta_percent Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0035 U+0025 U+00bd U+215c Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_five Meta_percent Meta_five Meta_percent Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0035 U+0025 U+00bd U+215c Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_five Meta_percent Meta_five Meta_percent Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0035 U+0025 U+00bd U+215c Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_five Meta_percent Meta_five Meta_percent Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0035 U+0025 U+00bd U+215c Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_five Meta_percent Meta_five Meta_percent Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0035 U+0025 U+00bd U+215c Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_five Meta_percent Meta_five Meta_percent Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0035 U+0025 U+00bd U+215c Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_five Meta_percent Meta_five Meta_percent Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0035 U+0025 U+00bd U+215c Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_five Meta_percent Meta_five Meta_percent Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright -keycode 7 = U+0036 U+005e U+00be U+215d Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_six Meta_asciicircum Meta_six Meta_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum U+0036 U+005e U+00be U+215d Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_six Meta_asciicircum Meta_six Meta_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum U+0036 U+005e U+00be U+215d Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_six Meta_asciicircum Meta_six Meta_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum U+0036 U+005e U+00be U+215d Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_six Meta_asciicircum Meta_six Meta_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum U+0036 U+005e U+00be U+215d Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_six Meta_asciicircum Meta_six Meta_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum U+0036 U+005e U+00be U+215d Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_six Meta_asciicircum Meta_six Meta_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum U+0036 U+005e U+00be U+215d Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_six Meta_asciicircum Meta_six Meta_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum U+0036 U+005e U+00be U+215d Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_six Meta_asciicircum Meta_six Meta_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum -keycode 8 = U+0037 U+0026 U+007b U+215e Control_underscore Control_underscore Control_underscore Control_underscore Meta_seven Meta_ampersand Meta_braceleft Meta_braceleft Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore U+0037 U+0026 U+007b U+215e Control_underscore Control_underscore Control_underscore Control_underscore Meta_seven Meta_ampersand Meta_braceleft Meta_braceleft Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore U+0037 U+0026 U+007b U+215e Control_underscore Control_underscore Control_underscore Control_underscore Meta_seven Meta_ampersand Meta_braceleft Meta_braceleft Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore U+0037 U+0026 U+007b U+215e Control_underscore Control_underscore Control_underscore Control_underscore Meta_seven Meta_ampersand Meta_braceleft Meta_braceleft Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore U+0037 U+0026 U+007b U+215e Control_underscore Control_underscore Control_underscore Control_underscore Meta_seven Meta_ampersand Meta_braceleft Meta_braceleft Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore U+0037 U+0026 U+007b U+215e Control_underscore Control_underscore Control_underscore Control_underscore Meta_seven Meta_ampersand Meta_braceleft Meta_braceleft Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore U+0037 U+0026 U+007b U+215e Control_underscore Control_underscore Control_underscore Control_underscore Meta_seven Meta_ampersand Meta_braceleft Meta_braceleft Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore U+0037 U+0026 U+007b U+215e Control_underscore Control_underscore Control_underscore Control_underscore Meta_seven Meta_ampersand Meta_braceleft Meta_braceleft Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore -keycode 9 = U+0038 U+002a U+005b U+2122 Delete Delete Escape Escape Meta_eight Meta_asterisk Meta_bracketleft Meta_bracketleft Meta_Delete Meta_Delete Meta_Escape Meta_Escape U+0038 U+002a U+005b U+2122 Delete Delete Escape Escape Meta_eight Meta_asterisk Meta_bracketleft Meta_bracketleft Meta_Delete Meta_Delete Meta_Escape Meta_Escape U+0038 U+002a U+005b U+2122 Delete Delete Escape Escape Meta_eight Meta_asterisk Meta_bracketleft Meta_bracketleft Meta_Delete Meta_Delete Meta_Escape Meta_Escape U+0038 U+002a U+005b U+2122 Delete Delete Escape Escape Meta_eight Meta_asterisk Meta_bracketleft Meta_bracketleft Meta_Delete Meta_Delete Meta_Escape Meta_Escape U+0038 U+002a U+005b U+2122 Delete Delete Escape Escape Meta_eight Meta_asterisk Meta_bracketleft Meta_bracketleft Meta_Delete Meta_Delete Meta_Escape Meta_Escape U+0038 U+002a U+005b U+2122 Delete Delete Escape Escape Meta_eight Meta_asterisk Meta_bracketleft Meta_bracketleft Meta_Delete Meta_Delete Meta_Escape Meta_Escape U+0038 U+002a U+005b U+2122 Delete Delete Escape Escape Meta_eight Meta_asterisk Meta_bracketleft Meta_bracketleft Meta_Delete Meta_Delete Meta_Escape Meta_Escape U+0038 U+002a U+005b U+2122 Delete Delete Escape Escape Meta_eight Meta_asterisk Meta_bracketleft Meta_bracketleft Meta_Delete Meta_Delete Meta_Escape Meta_Escape -keycode 10 = U+0039 U+0028 U+005d U+00b1 Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_nine Meta_parenleft Meta_bracketright Meta_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0039 U+0028 U+005d U+00b1 Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_nine Meta_parenleft Meta_bracketright Meta_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0039 U+0028 U+005d U+00b1 Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_nine Meta_parenleft Meta_bracketright Meta_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0039 U+0028 U+005d U+00b1 Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_nine Meta_parenleft Meta_bracketright Meta_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0039 U+0028 U+005d U+00b1 Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_nine Meta_parenleft Meta_bracketright Meta_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0039 U+0028 U+005d U+00b1 Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_nine Meta_parenleft Meta_bracketright Meta_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0039 U+0028 U+005d U+00b1 Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_nine Meta_parenleft Meta_bracketright Meta_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0039 U+0028 U+005d U+00b1 Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_nine Meta_parenleft Meta_bracketright Meta_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright -keycode 11 = U+0030 U+0029 U+007d U+00b0 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_zero Meta_parenright Meta_braceright Meta_braceright VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0030 U+0029 U+007d U+00b0 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_zero Meta_parenright Meta_braceright Meta_braceright VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0030 U+0029 U+007d U+00b0 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_zero Meta_parenright Meta_braceright Meta_braceright VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0030 U+0029 U+007d U+00b0 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_zero Meta_parenright Meta_braceright Meta_braceright VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0030 U+0029 U+007d U+00b0 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_zero Meta_parenright Meta_braceright Meta_braceright VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0030 U+0029 U+007d U+00b0 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_zero Meta_parenright Meta_braceright Meta_braceright VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0030 U+0029 U+007d U+00b0 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_zero Meta_parenright Meta_braceright Meta_braceright VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0030 U+0029 U+007d U+00b0 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_zero Meta_parenright Meta_braceright Meta_braceright VoidSymbol VoidSymbol VoidSymbol VoidSymbol -keycode 12 = U+002d U+005f U+005c U+00bf Control_underscore Control_underscore Control_backslash Control_backslash Meta_minus Meta_underscore Meta_backslash Meta_backslash Meta_Control_underscore Meta_Control_underscore Meta_Control_backslash Meta_Control_backslash U+002d U+005f U+005c U+00bf Control_underscore Control_underscore Control_backslash Control_backslash Meta_minus Meta_underscore Meta_backslash Meta_backslash Meta_Control_underscore Meta_Control_underscore Meta_Control_backslash Meta_Control_backslash U+002d U+005f U+005c U+00bf Control_underscore Control_underscore Control_backslash Control_backslash Meta_minus Meta_underscore Meta_backslash Meta_backslash Meta_Control_underscore Meta_Control_underscore Meta_Control_backslash Meta_Control_backslash U+002d U+005f U+005c U+00bf Control_underscore Control_underscore Control_backslash Control_backslash Meta_minus Meta_underscore Meta_backslash Meta_backslash Meta_Control_underscore Meta_Control_underscore Meta_Control_backslash Meta_Control_backslash U+002d U+005f U+005c U+00bf Control_underscore Control_underscore Control_backslash Control_backslash Meta_minus Meta_underscore Meta_backslash Meta_backslash Meta_Control_underscore Meta_Control_underscore Meta_Control_backslash Meta_Control_backslash U+002d U+005f U+005c U+00bf Control_underscore Control_underscore Control_backslash Control_backslash Meta_minus Meta_underscore Meta_backslash Meta_backslash Meta_Control_underscore Meta_Control_underscore Meta_Control_backslash Meta_Control_backslash U+002d U+005f U+005c U+00bf Control_underscore Control_underscore Control_backslash Control_backslash Meta_minus Meta_underscore Meta_backslash Meta_backslash Meta_Control_underscore Meta_Control_underscore Meta_Control_backslash Meta_Control_backslash U+002d U+005f U+005c U+00bf Control_underscore Control_underscore Control_backslash Control_backslash Meta_minus Meta_underscore Meta_backslash Meta_backslash Meta_Control_underscore Meta_Control_underscore Meta_Control_backslash Meta_Control_backslash -keycode 13 = U+003d U+002b dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_cedilla dead_ogonek Meta_equal Meta_plus dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_cedilla dead_ogonek U+003d U+002b dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_cedilla dead_ogonek Meta_equal Meta_plus dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_cedilla dead_ogonek U+003d U+002b dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_cedilla dead_ogonek Meta_equal Meta_plus dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_cedilla dead_ogonek U+003d U+002b dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_cedilla dead_ogonek Meta_equal Meta_plus dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_cedilla dead_ogonek U+003d U+002b dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_cedilla dead_ogonek Meta_equal Meta_plus dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_cedilla dead_ogonek U+003d U+002b dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_cedilla dead_ogonek Meta_equal Meta_plus dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_cedilla dead_ogonek U+003d U+002b dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_cedilla dead_ogonek Meta_equal Meta_plus dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_cedilla dead_ogonek U+003d U+002b dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_cedilla dead_ogonek Meta_equal Meta_plus dead_cedilla dead_ogonek dead_cedilla dead_ogonek dead_cedilla dead_ogonek +keycode 2 = U+0026 U+0031 U+00b9 U+00a1 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_ampersand Meta_one Meta_ampersand Meta_one VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0026 U+0031 U+00b9 U+00a1 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_ampersand Meta_one Meta_ampersand Meta_one VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0026 U+0031 U+00b9 U+00a1 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_ampersand Meta_one Meta_ampersand Meta_one VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0026 U+0031 U+00b9 U+00a1 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_ampersand Meta_one Meta_ampersand Meta_one VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0026 U+0031 U+00b9 U+00a1 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_ampersand Meta_one Meta_ampersand Meta_one VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0026 U+0031 U+00b9 U+00a1 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_ampersand Meta_one Meta_ampersand Meta_one VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0026 U+0031 U+00b9 U+00a1 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_ampersand Meta_one Meta_ampersand Meta_one VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+0026 U+0031 U+00b9 U+00a1 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_ampersand Meta_one Meta_ampersand Meta_one VoidSymbol VoidSymbol VoidSymbol VoidSymbol +keycode 3 = +U+00e9 U+0032 U+007e U+215b nul nul nul nul Meta_two Meta_two Meta_asciitilde Meta_asciitilde Meta_nul Meta_nul Meta_nul Meta_nul +U+00e9 U+0032 U+007e U+215b nul nul nul nul Meta_two Meta_two Meta_asciitilde Meta_asciitilde Meta_nul Meta_nul Meta_nul Meta_nul +U+00e9 U+0032 U+007e U+215b nul nul nul nul Meta_two Meta_two Meta_asciitilde Meta_asciitilde Meta_nul Meta_nul Meta_nul Meta_nul +U+00e9 U+0032 U+007e U+215b nul nul nul nul Meta_two Meta_two Meta_asciitilde Meta_asciitilde Meta_nul Meta_nul Meta_nul Meta_nul +U+00c9 U+0032 U+007e U+215b nul nul nul nul Meta_two Meta_two Meta_asciitilde Meta_asciitilde Meta_nul Meta_nul Meta_nul Meta_nul +U+00c9 U+0032 U+007e U+215b nul nul nul nul Meta_two Meta_two Meta_asciitilde Meta_asciitilde Meta_nul Meta_nul Meta_nul Meta_nul +U+00c9 U+0032 U+007e U+215b nul nul nul nul Meta_two Meta_two Meta_asciitilde Meta_asciitilde Meta_nul Meta_nul Meta_nul Meta_nul +U+00c9 U+0032 U+007e U+215b nul nul nul nul Meta_two Meta_two Meta_asciitilde Meta_asciitilde Meta_nul Meta_nul Meta_nul Meta_nul +keycode 4 = U+0022 U+0033 U+0023 U+00a3 Escape Escape Escape Escape Meta_quotedbl Meta_three Meta_numbersign Meta_numbersign Meta_Escape Meta_Escape Meta_Escape Meta_Escape U+0022 U+0033 U+0023 U+00a3 Escape Escape Escape Escape Meta_quotedbl Meta_three Meta_numbersign Meta_numbersign Meta_Escape Meta_Escape Meta_Escape Meta_Escape U+0022 U+0033 U+0023 U+00a3 Escape Escape Escape Escape Meta_quotedbl Meta_three Meta_numbersign Meta_numbersign Meta_Escape Meta_Escape Meta_Escape Meta_Escape U+0022 U+0033 U+0023 U+00a3 Escape Escape Escape Escape Meta_quotedbl Meta_three Meta_numbersign Meta_numbersign Meta_Escape Meta_Escape Meta_Escape Meta_Escape U+0022 U+0033 U+0023 U+00a3 Escape Escape Escape Escape Meta_quotedbl Meta_three Meta_numbersign Meta_numbersign Meta_Escape Meta_Escape Meta_Escape Meta_Escape U+0022 U+0033 U+0023 U+00a3 Escape Escape Escape Escape Meta_quotedbl Meta_three Meta_numbersign Meta_numbersign Meta_Escape Meta_Escape Meta_Escape Meta_Escape U+0022 U+0033 U+0023 U+00a3 Escape Escape Escape Escape Meta_quotedbl Meta_three Meta_numbersign Meta_numbersign Meta_Escape Meta_Escape Meta_Escape Meta_Escape U+0022 U+0033 U+0023 U+00a3 Escape Escape Escape Escape Meta_quotedbl Meta_three Meta_numbersign Meta_numbersign Meta_Escape Meta_Escape Meta_Escape Meta_Escape +keycode 5 = U+0027 U+0034 U+007b U+0024 Control_g Control_backslash Control_g Control_backslash Meta_apostrophe Meta_four Meta_braceleft Meta_dollar Meta_Control_g Meta_Control_backslash Meta_Control_g Meta_Control_backslash U+0027 U+0034 U+007b U+0024 Control_g Control_backslash Control_g Control_backslash Meta_apostrophe Meta_four Meta_braceleft Meta_dollar Meta_Control_g Meta_Control_backslash Meta_Control_g Meta_Control_backslash U+0027 U+0034 U+007b U+0024 Control_g Control_backslash Control_g Control_backslash Meta_apostrophe Meta_four Meta_braceleft Meta_dollar Meta_Control_g Meta_Control_backslash Meta_Control_g Meta_Control_backslash U+0027 U+0034 U+007b U+0024 Control_g Control_backslash Control_g Control_backslash Meta_apostrophe Meta_four Meta_braceleft Meta_dollar Meta_Control_g Meta_Control_backslash Meta_Control_g Meta_Control_backslash U+0027 U+0034 U+007b U+0024 Control_g Control_backslash Control_g Control_backslash Meta_apostrophe Meta_four Meta_braceleft Meta_dollar Meta_Control_g Meta_Control_backslash Meta_Control_g Meta_Control_backslash U+0027 U+0034 U+007b U+0024 Control_g Control_backslash Control_g Control_backslash Meta_apostrophe Meta_four Meta_braceleft Meta_dollar Meta_Control_g Meta_Control_backslash Meta_Control_g Meta_Control_backslash U+0027 U+0034 U+007b U+0024 Control_g Control_backslash Control_g Control_backslash Meta_apostrophe Meta_four Meta_braceleft Meta_dollar Meta_Control_g Meta_Control_backslash Meta_Control_g Meta_Control_backslash U+0027 U+0034 U+007b U+0024 Control_g Control_backslash Control_g Control_backslash Meta_apostrophe Meta_four Meta_braceleft Meta_dollar Meta_Control_g Meta_Control_backslash Meta_Control_g Meta_Control_backslash +keycode 6 = U+0028 U+0035 U+005b U+215c Control_bracketright Control_bracketright Escape Escape Meta_parenleft Meta_five Meta_bracketleft Meta_bracketleft Meta_Control_bracketright Meta_Control_bracketright Meta_Escape Meta_Escape U+0028 U+0035 U+005b U+215c Control_bracketright Control_bracketright Escape Escape Meta_parenleft Meta_five Meta_bracketleft Meta_bracketleft Meta_Control_bracketright Meta_Control_bracketright Meta_Escape Meta_Escape U+0028 U+0035 U+005b U+215c Control_bracketright Control_bracketright Escape Escape Meta_parenleft Meta_five Meta_bracketleft Meta_bracketleft Meta_Control_bracketright Meta_Control_bracketright Meta_Escape Meta_Escape U+0028 U+0035 U+005b U+215c Control_bracketright Control_bracketright Escape Escape Meta_parenleft Meta_five Meta_bracketleft Meta_bracketleft Meta_Control_bracketright Meta_Control_bracketright Meta_Escape Meta_Escape U+0028 U+0035 U+005b U+215c Control_bracketright Control_bracketright Escape Escape Meta_parenleft Meta_five Meta_bracketleft Meta_bracketleft Meta_Control_bracketright Meta_Control_bracketright Meta_Escape Meta_Escape U+0028 U+0035 U+005b U+215c Control_bracketright Control_bracketright Escape Escape Meta_parenleft Meta_five Meta_bracketleft Meta_bracketleft Meta_Control_bracketright Meta_Control_bracketright Meta_Escape Meta_Escape U+0028 U+0035 U+005b U+215c Control_bracketright Control_bracketright Escape Escape Meta_parenleft Meta_five Meta_bracketleft Meta_bracketleft Meta_Control_bracketright Meta_Control_bracketright Meta_Escape Meta_Escape U+0028 U+0035 U+005b U+215c Control_bracketright Control_bracketright Escape Escape Meta_parenleft Meta_five Meta_bracketleft Meta_bracketleft Meta_Control_bracketright Meta_Control_bracketright Meta_Escape Meta_Escape +keycode 7 = U+002d U+0036 U+007c U+215d Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_minus Meta_six Meta_bar Meta_bar Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum U+002d U+0036 U+007c U+215d Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_minus Meta_six Meta_bar Meta_bar Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum U+002d U+0036 U+007c U+215d Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_minus Meta_six Meta_bar Meta_bar Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum U+002d U+0036 U+007c U+215d Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_minus Meta_six Meta_bar Meta_bar Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum U+002d U+0036 U+007c U+215d Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_minus Meta_six Meta_bar Meta_bar Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum U+002d U+0036 U+007c U+215d Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_minus Meta_six Meta_bar Meta_bar Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum U+002d U+0036 U+007c U+215d Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_minus Meta_six Meta_bar Meta_bar Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum U+002d U+0036 U+007c U+215d Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_minus Meta_six Meta_bar Meta_bar Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum +keycode 8 = +U+00e8 U+0037 U+0060 U+215e Control_underscore Control_underscore nul nul Meta_seven Meta_seven Meta_grave Meta_grave Meta_Control_underscore Meta_Control_underscore Meta_nul Meta_nul +U+00e8 U+0037 U+0060 U+215e Control_underscore Control_underscore nul nul Meta_seven Meta_seven Meta_grave Meta_grave Meta_Control_underscore Meta_Control_underscore Meta_nul Meta_nul +U+00e8 U+0037 U+0060 U+215e Control_underscore Control_underscore nul nul Meta_seven Meta_seven Meta_grave Meta_grave Meta_Control_underscore Meta_Control_underscore Meta_nul Meta_nul +U+00e8 U+0037 U+0060 U+215e Control_underscore Control_underscore nul nul Meta_seven Meta_seven Meta_grave Meta_grave Meta_Control_underscore Meta_Control_underscore Meta_nul Meta_nul +U+00c8 U+0037 U+0060 U+215e Control_underscore Control_underscore nul nul Meta_seven Meta_seven Meta_grave Meta_grave Meta_Control_underscore Meta_Control_underscore Meta_nul Meta_nul +U+00c8 U+0037 U+0060 U+215e Control_underscore Control_underscore nul nul Meta_seven Meta_seven Meta_grave Meta_grave Meta_Control_underscore Meta_Control_underscore Meta_nul Meta_nul +U+00c8 U+0037 U+0060 U+215e Control_underscore Control_underscore nul nul Meta_seven Meta_seven Meta_grave Meta_grave Meta_Control_underscore Meta_Control_underscore Meta_nul Meta_nul +U+00c8 U+0037 U+0060 U+215e Control_underscore Control_underscore nul nul Meta_seven Meta_seven Meta_grave Meta_grave Meta_Control_underscore Meta_Control_underscore Meta_nul Meta_nul +keycode 9 = U+005f U+0038 U+005c U+2122 Control_underscore Delete Control_backslash Control_backslash Meta_underscore Meta_eight Meta_backslash Meta_backslash Meta_Control_underscore Meta_Delete Meta_Control_backslash Meta_Control_backslash U+005f U+0038 U+005c U+2122 Control_underscore Delete Control_backslash Control_backslash Meta_underscore Meta_eight Meta_backslash Meta_backslash Meta_Control_underscore Meta_Delete Meta_Control_backslash Meta_Control_backslash U+005f U+0038 U+005c U+2122 Control_underscore Delete Control_backslash Control_backslash Meta_underscore Meta_eight Meta_backslash Meta_backslash Meta_Control_underscore Meta_Delete Meta_Control_backslash Meta_Control_backslash U+005f U+0038 U+005c U+2122 Control_underscore Delete Control_backslash Control_backslash Meta_underscore Meta_eight Meta_backslash Meta_backslash Meta_Control_underscore Meta_Delete Meta_Control_backslash Meta_Control_backslash U+005f U+0038 U+005c U+2122 Control_underscore Delete Control_backslash Control_backslash Meta_underscore Meta_eight Meta_backslash Meta_backslash Meta_Control_underscore Meta_Delete Meta_Control_backslash Meta_Control_backslash U+005f U+0038 U+005c U+2122 Control_underscore Delete Control_backslash Control_backslash Meta_underscore Meta_eight Meta_backslash Meta_backslash Meta_Control_underscore Meta_Delete Meta_Control_backslash Meta_Control_backslash U+005f U+0038 U+005c U+2122 Control_underscore Delete Control_backslash Control_backslash Meta_underscore Meta_eight Meta_backslash Meta_backslash Meta_Control_underscore Meta_Delete Meta_Control_backslash Meta_Control_backslash U+005f U+0038 U+005c U+2122 Control_underscore Delete Control_backslash Control_backslash Meta_underscore Meta_eight Meta_backslash Meta_backslash Meta_Control_underscore Meta_Delete Meta_Control_backslash Meta_Control_backslash +keycode 10 = +U+00e7 U+0039 U+005e U+00b1 Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_nine Meta_nine Meta_asciicircum Meta_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum +U+00e7 U+0039 U+005e U+00b1 Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_nine Meta_nine Meta_asciicircum Meta_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum +U+00e7 U+0039 U+005e U+00b1 Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_nine Meta_nine Meta_asciicircum Meta_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum +U+00e7 U+0039 U+005e U+00b1 Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_nine Meta_nine Meta_asciicircum Meta_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum +U+00c7 U+0039 U+005e U+00b1 Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_nine Meta_nine Meta_asciicircum Meta_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum +U+00c7 U+0039 U+005e U+00b1 Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_nine Meta_nine Meta_asciicircum Meta_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum +U+00c7 U+0039 U+005e U+00b1 Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_nine Meta_nine Meta_asciicircum Meta_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum +U+00c7 U+0039 U+005e U+00b1 Control_asciicircum Control_asciicircum Control_asciicircum Control_asciicircum Meta_nine Meta_nine Meta_asciicircum Meta_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum +keycode 11 = +U+00e0 U+0030 U+0040 U+00b0 nul nul nul nul Meta_zero Meta_zero Meta_at Meta_at Meta_nul Meta_nul Meta_nul Meta_nul +U+00e0 U+0030 U+0040 U+00b0 nul nul nul nul Meta_zero Meta_zero Meta_at Meta_at Meta_nul Meta_nul Meta_nul Meta_nul +U+00e0 U+0030 U+0040 U+00b0 nul nul nul nul Meta_zero Meta_zero Meta_at Meta_at Meta_nul Meta_nul Meta_nul Meta_nul +U+00e0 U+0030 U+0040 U+00b0 nul nul nul nul Meta_zero Meta_zero Meta_at Meta_at Meta_nul Meta_nul Meta_nul Meta_nul +U+00c0 U+0030 U+0040 U+00b0 nul nul nul nul Meta_zero Meta_zero Meta_at Meta_at Meta_nul Meta_nul Meta_nul Meta_nul +U+00c0 U+0030 U+0040 U+00b0 nul nul nul nul Meta_zero Meta_zero Meta_at Meta_at Meta_nul Meta_nul Meta_nul Meta_nul +U+00c0 U+0030 U+0040 U+00b0 nul nul nul nul Meta_zero Meta_zero Meta_at Meta_at Meta_nul Meta_nul Meta_nul Meta_nul +U+00c0 U+0030 U+0040 U+00b0 nul nul nul nul Meta_zero Meta_zero Meta_at Meta_at Meta_nul Meta_nul Meta_nul Meta_nul +keycode 12 = U+0029 U+00b0 U+005d U+00bf Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_parenright Meta_parenright Meta_bracketright Meta_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0029 U+00b0 U+005d U+00bf Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_parenright Meta_parenright Meta_bracketright Meta_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0029 U+00b0 U+005d U+00bf Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_parenright Meta_parenright Meta_bracketright Meta_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0029 U+00b0 U+005d U+00bf Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_parenright Meta_parenright Meta_bracketright Meta_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0029 U+00b0 U+005d U+00bf Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_parenright Meta_parenright Meta_bracketright Meta_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0029 U+00b0 U+005d U+00bf Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_parenright Meta_parenright Meta_bracketright Meta_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0029 U+00b0 U+005d U+00bf Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_parenright Meta_parenright Meta_bracketright Meta_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright U+0029 U+00b0 U+005d U+00bf Control_bracketright Control_bracketright Control_bracketright Control_bracketright Meta_parenright Meta_parenright Meta_bracketright Meta_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright Meta_Control_bracketright +keycode 13 = U+003d U+002b U+007d dead_ogonek dead_ogonek dead_ogonek dead_ogonek dead_ogonek Meta_equal Meta_plus Meta_braceright dead_ogonek dead_ogonek dead_ogonek dead_ogonek dead_ogonek U+003d U+002b U+007d dead_ogonek dead_ogonek dead_ogonek dead_ogonek dead_ogonek Meta_equal Meta_plus Meta_braceright dead_ogonek dead_ogonek dead_ogonek dead_ogonek dead_ogonek U+003d U+002b U+007d dead_ogonek dead_ogonek dead_ogonek dead_ogonek dead_ogonek Meta_equal Meta_plus Meta_braceright dead_ogonek dead_ogonek dead_ogonek dead_ogonek dead_ogonek U+003d U+002b U+007d dead_ogonek dead_ogonek dead_ogonek dead_ogonek dead_ogonek Meta_equal Meta_plus Meta_braceright dead_ogonek dead_ogonek dead_ogonek dead_ogonek dead_ogonek U+003d U+002b U+007d dead_ogonek dead_ogonek dead_ogonek dead_ogonek dead_ogonek Meta_equal Meta_plus Meta_braceright dead_ogonek dead_ogonek dead_ogonek dead_ogonek dead_ogonek U+003d U+002b U+007d dead_ogonek dead_ogonek dead_ogonek dead_ogonek dead_ogonek Meta_equal Meta_plus Meta_braceright dead_ogonek dead_ogonek dead_ogonek dead_ogonek dead_ogonek U+003d U+002b U+007d dead_ogonek dead_ogonek dead_ogonek dead_ogonek dead_ogonek Meta_equal Meta_plus Meta_braceright dead_ogonek dead_ogonek dead_ogonek dead_ogonek dead_ogonek U+003d U+002b U+007d dead_ogonek dead_ogonek dead_ogonek dead_ogonek dead_ogonek Meta_equal Meta_plus Meta_braceright dead_ogonek dead_ogonek dead_ogonek dead_ogonek dead_ogonek keycode 14 = Delete Delete Delete Delete BackSpace BackSpace BackSpace BackSpace Meta_Delete Meta_Delete Meta_Delete Meta_Delete Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace Delete Delete Delete Delete BackSpace BackSpace BackSpace BackSpace Meta_Delete Meta_Delete Meta_Delete Meta_Delete Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace Delete Delete Delete Delete BackSpace BackSpace BackSpace BackSpace Meta_Delete Meta_Delete Meta_Delete Meta_Delete Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace Delete Delete Delete Delete BackSpace BackSpace BackSpace BackSpace Meta_Delete Meta_Delete Meta_Delete Meta_Delete Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace Delete Delete Delete Delete BackSpace BackSpace BackSpace BackSpace Meta_Delete Meta_Delete Meta_Delete Meta_Delete Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace Delete Delete Delete Delete BackSpace BackSpace BackSpace BackSpace Meta_Delete Meta_Delete Meta_Delete Meta_Delete Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace Delete Delete Delete Delete BackSpace BackSpace BackSpace BackSpace Meta_Delete Meta_Delete Meta_Delete Meta_Delete Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace Delete Delete Delete Delete BackSpace BackSpace BackSpace BackSpace Meta_Delete Meta_Delete Meta_Delete Meta_Delete Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace keycode 15 = Tab Tab Tab Tab Tab Tab Tab Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Tab Tab Tab Tab Tab Tab Tab Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Tab Tab Tab Tab Tab Tab Tab Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Tab Tab Tab Tab Tab Tab Tab Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Tab Tab Tab Tab Tab Tab Tab Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Tab Tab Tab Tab Tab Tab Tab Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Tab Tab Tab Tab Tab Tab Tab Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Tab Tab Tab Tab Tab Tab Tab Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab Meta_Tab -keycode 16 = +U+0071 +U+0051 U+0040 +U+03a9 Control_q Control_q nul nul Meta_q Meta_Q Meta_at Meta_at Meta_Control_q Meta_Control_q Meta_nul Meta_nul +U+0071 +U+0051 U+0040 +U+03a9 Control_q Control_q nul nul Meta_q Meta_Q Meta_at Meta_at Meta_Control_q Meta_Control_q Meta_nul Meta_nul +U+0071 +U+0051 U+0040 +U+03a9 Control_q Control_q nul nul Meta_q Meta_Q Meta_at Meta_at Meta_Control_q Meta_Control_q Meta_nul Meta_nul +U+0071 +U+0051 U+0040 +U+03a9 Control_q Control_q nul nul Meta_q Meta_Q Meta_at Meta_at Meta_Control_q Meta_Control_q Meta_nul Meta_nul +U+0051 +U+0071 U+0040 +U+03c9 Control_q Control_q nul nul Meta_q Meta_Q Meta_at Meta_at Meta_Control_q Meta_Control_q Meta_nul Meta_nul +U+0051 +U+0071 U+0040 +U+03c9 Control_q Control_q nul nul Meta_q Meta_Q Meta_at Meta_at Meta_Control_q Meta_Control_q Meta_nul Meta_nul +U+0051 +U+0071 U+0040 +U+03c9 Control_q Control_q nul nul Meta_q Meta_Q Meta_at Meta_at Meta_Control_q Meta_Control_q Meta_nul Meta_nul +U+0051 +U+0071 U+0040 +U+03c9 Control_q Control_q nul nul Meta_q Meta_Q Meta_at Meta_at Meta_Control_q Meta_Control_q Meta_nul Meta_nul -keycode 17 = +U+0077 +U+0057 +U+0142 +U+0141 Control_w Control_w Control_w Control_w Meta_w Meta_W Meta_w Meta_W Meta_Control_w Meta_Control_w Meta_Control_w Meta_Control_w +U+0077 +U+0057 +U+0142 +U+0141 Control_w Control_w Control_w Control_w Meta_w Meta_W Meta_w Meta_W Meta_Control_w Meta_Control_w Meta_Control_w Meta_Control_w +U+0077 +U+0057 +U+0142 +U+0141 Control_w Control_w Control_w Control_w Meta_w Meta_W Meta_w Meta_W Meta_Control_w Meta_Control_w Meta_Control_w Meta_Control_w +U+0077 +U+0057 +U+0142 +U+0141 Control_w Control_w Control_w Control_w Meta_w Meta_W Meta_w Meta_W Meta_Control_w Meta_Control_w Meta_Control_w Meta_Control_w +U+0057 +U+0077 +U+0141 +U+0142 Control_w Control_w Control_w Control_w Meta_w Meta_W Meta_w Meta_W Meta_Control_w Meta_Control_w Meta_Control_w Meta_Control_w +U+0057 +U+0077 +U+0141 +U+0142 Control_w Control_w Control_w Control_w Meta_w Meta_W Meta_w Meta_W Meta_Control_w Meta_Control_w Meta_Control_w Meta_Control_w +U+0057 +U+0077 +U+0141 +U+0142 Control_w Control_w Control_w Control_w Meta_w Meta_W Meta_w Meta_W Meta_Control_w Meta_Control_w Meta_Control_w Meta_Control_w +U+0057 +U+0077 +U+0141 +U+0142 Control_w Control_w Control_w Control_w Meta_w Meta_W Meta_w Meta_W Meta_Control_w Meta_Control_w Meta_Control_w Meta_Control_w -keycode 18 = +U+0065 +U+0045 +U+0065 +U+0045 Control_e Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_E Meta_Control_e Meta_Control_e Meta_Control_e Meta_Control_e +U+0065 +U+0045 +U+0065 +U+0045 Control_e Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_E Meta_Control_e Meta_Control_e Meta_Control_e Meta_Control_e +U+0065 +U+0045 +U+0065 +U+0045 Control_e Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_E Meta_Control_e Meta_Control_e Meta_Control_e Meta_Control_e +U+0065 +U+0045 +U+0065 +U+0045 Control_e Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_E Meta_Control_e Meta_Control_e Meta_Control_e Meta_Control_e +U+0045 +U+0065 +U+0045 +U+0065 Control_e Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_E Meta_Control_e Meta_Control_e Meta_Control_e Meta_Control_e +U+0045 +U+0065 +U+0045 +U+0065 Control_e Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_E Meta_Control_e Meta_Control_e Meta_Control_e Meta_Control_e +U+0045 +U+0065 +U+0045 +U+0065 Control_e Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_E Meta_Control_e Meta_Control_e Meta_Control_e Meta_Control_e +U+0045 +U+0065 +U+0045 +U+0065 Control_e Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_E Meta_Control_e Meta_Control_e Meta_Control_e Meta_Control_e +keycode 16 = +U+0061 +U+0041 +U+00e6 +U+00c6 Control_a Control_a Control_a Control_a Meta_a Meta_A Meta_a Meta_A Meta_Control_a Meta_Control_a Meta_Control_a Meta_Control_a +U+0061 +U+0041 +U+00e6 +U+00c6 Control_a Control_a Control_a Control_a Meta_a Meta_A Meta_a Meta_A Meta_Control_a Meta_Control_a Meta_Control_a Meta_Control_a +U+0061 +U+0041 +U+00e6 +U+00c6 Control_a Control_a Control_a Control_a Meta_a Meta_A Meta_a Meta_A Meta_Control_a Meta_Control_a Meta_Control_a Meta_Control_a +U+0061 +U+0041 +U+00e6 +U+00c6 Control_a Control_a Control_a Control_a Meta_a Meta_A Meta_a Meta_A Meta_Control_a Meta_Control_a Meta_Control_a Meta_Control_a +U+0041 +U+0061 +U+00c6 +U+00e6 Control_a Control_a Control_a Control_a Meta_a Meta_A Meta_a Meta_A Meta_Control_a Meta_Control_a Meta_Control_a Meta_Control_a +U+0041 +U+0061 +U+00c6 +U+00e6 Control_a Control_a Control_a Control_a Meta_a Meta_A Meta_a Meta_A Meta_Control_a Meta_Control_a Meta_Control_a Meta_Control_a +U+0041 +U+0061 +U+00c6 +U+00e6 Control_a Control_a Control_a Control_a Meta_a Meta_A Meta_a Meta_A Meta_Control_a Meta_Control_a Meta_Control_a Meta_Control_a +U+0041 +U+0061 +U+00c6 +U+00e6 Control_a Control_a Control_a Control_a Meta_a Meta_A Meta_a Meta_A Meta_Control_a Meta_Control_a Meta_Control_a Meta_Control_a +keycode 17 = +U+007a +U+005a U+00ab U+003c Control_z Control_z Control_z Control_z Meta_z Meta_Z Meta_z Meta_less Meta_Control_z Meta_Control_z Meta_Control_z Meta_Control_z +U+007a +U+005a U+00ab U+003c Control_z Control_z Control_z Control_z Meta_z Meta_Z Meta_z Meta_less Meta_Control_z Meta_Control_z Meta_Control_z Meta_Control_z +U+007a +U+005a U+00ab U+003c Control_z Control_z Control_z Control_z Meta_z Meta_Z Meta_z Meta_less Meta_Control_z Meta_Control_z Meta_Control_z Meta_Control_z +U+007a +U+005a U+00ab U+003c Control_z Control_z Control_z Control_z Meta_z Meta_Z Meta_z Meta_less Meta_Control_z Meta_Control_z Meta_Control_z Meta_Control_z +U+005a +U+007a U+00ab U+003c Control_z Control_z Control_z Control_z Meta_z Meta_Z Meta_z Meta_less Meta_Control_z Meta_Control_z Meta_Control_z Meta_Control_z +U+005a +U+007a U+00ab U+003c Control_z Control_z Control_z Control_z Meta_z Meta_Z Meta_z Meta_less Meta_Control_z Meta_Control_z Meta_Control_z Meta_Control_z +U+005a +U+007a U+00ab U+003c Control_z Control_z Control_z Control_z Meta_z Meta_Z Meta_z Meta_less Meta_Control_z Meta_Control_z Meta_Control_z Meta_Control_z +U+005a +U+007a U+00ab U+003c Control_z Control_z Control_z Control_z Meta_z Meta_Z Meta_z Meta_less Meta_Control_z Meta_Control_z Meta_Control_z Meta_Control_z +keycode 18 = +U+0065 +U+0045 U+20ac U+00a2 Control_e Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_E Meta_Control_e Meta_Control_e Meta_Control_e Meta_Control_e +U+0065 +U+0045 U+20ac U+00a2 Control_e Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_E Meta_Control_e Meta_Control_e Meta_Control_e Meta_Control_e +U+0065 +U+0045 U+20ac U+00a2 Control_e Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_E Meta_Control_e Meta_Control_e Meta_Control_e Meta_Control_e +U+0065 +U+0045 U+20ac U+00a2 Control_e Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_E Meta_Control_e Meta_Control_e Meta_Control_e Meta_Control_e +U+0045 +U+0065 U+20ac U+00a2 Control_e Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_E Meta_Control_e Meta_Control_e Meta_Control_e Meta_Control_e +U+0045 +U+0065 U+20ac U+00a2 Control_e Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_E Meta_Control_e Meta_Control_e Meta_Control_e Meta_Control_e +U+0045 +U+0065 U+20ac U+00a2 Control_e Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_E Meta_Control_e Meta_Control_e Meta_Control_e Meta_Control_e +U+0045 +U+0065 U+20ac U+00a2 Control_e Control_e Control_e Control_e Meta_e Meta_E Meta_e Meta_E Meta_Control_e Meta_Control_e Meta_Control_e Meta_Control_e keycode 19 = +U+0072 +U+0052 U+00b6 U+00ae Control_r Control_r Control_r Control_r Meta_r Meta_R Meta_r Meta_R Meta_Control_r Meta_Control_r Meta_Control_r Meta_Control_r +U+0072 +U+0052 U+00b6 U+00ae Control_r Control_r Control_r Control_r Meta_r Meta_R Meta_r Meta_R Meta_Control_r Meta_Control_r Meta_Control_r Meta_Control_r +U+0072 +U+0052 U+00b6 U+00ae Control_r Control_r Control_r Control_r Meta_r Meta_R Meta_r Meta_R Meta_Control_r Meta_Control_r Meta_Control_r Meta_Control_r +U+0072 +U+0052 U+00b6 U+00ae Control_r Control_r Control_r Control_r Meta_r Meta_R Meta_r Meta_R Meta_Control_r Meta_Control_r Meta_Control_r Meta_Control_r +U+0052 +U+0072 U+00b6 U+00ae Control_r Control_r Control_r Control_r Meta_r Meta_R Meta_r Meta_R Meta_Control_r Meta_Control_r Meta_Control_r Meta_Control_r +U+0052 +U+0072 U+00b6 U+00ae Control_r Control_r Control_r Control_r Meta_r Meta_R Meta_r Meta_R Meta_Control_r Meta_Control_r Meta_Control_r Meta_Control_r +U+0052 +U+0072 U+00b6 U+00ae Control_r Control_r Control_r Control_r Meta_r Meta_R Meta_r Meta_R Meta_Control_r Meta_Control_r Meta_Control_r Meta_Control_r +U+0052 +U+0072 U+00b6 U+00ae Control_r Control_r Control_r Control_r Meta_r Meta_R Meta_r Meta_R Meta_Control_r Meta_Control_r Meta_Control_r Meta_Control_r keycode 20 = +U+0074 +U+0054 +U+0167 +U+0166 Control_t Control_t Control_t Control_t Meta_t Meta_T Meta_t Meta_T Meta_Control_t Meta_Control_t Meta_Control_t Meta_Control_t +U+0074 +U+0054 +U+0167 +U+0166 Control_t Control_t Control_t Control_t Meta_t Meta_T Meta_t Meta_T Meta_Control_t Meta_Control_t Meta_Control_t Meta_Control_t +U+0074 +U+0054 +U+0167 +U+0166 Control_t Control_t Control_t Control_t Meta_t Meta_T Meta_t Meta_T Meta_Control_t Meta_Control_t Meta_Control_t Meta_Control_t +U+0074 +U+0054 +U+0167 +U+0166 Control_t Control_t Control_t Control_t Meta_t Meta_T Meta_t Meta_T Meta_Control_t Meta_Control_t Meta_Control_t Meta_Control_t +U+0054 +U+0074 +U+0166 +U+0167 Control_t Control_t Control_t Control_t Meta_t Meta_T Meta_t Meta_T Meta_Control_t Meta_Control_t Meta_Control_t Meta_Control_t +U+0054 +U+0074 +U+0166 +U+0167 Control_t Control_t Control_t Control_t Meta_t Meta_T Meta_t Meta_T Meta_Control_t Meta_Control_t Meta_Control_t Meta_Control_t +U+0054 +U+0074 +U+0166 +U+0167 Control_t Control_t Control_t Control_t Meta_t Meta_T Meta_t Meta_T Meta_Control_t Meta_Control_t Meta_Control_t Meta_Control_t +U+0054 +U+0074 +U+0166 +U+0167 Control_t Control_t Control_t Control_t Meta_t Meta_T Meta_t Meta_T Meta_Control_t Meta_Control_t Meta_Control_t Meta_Control_t keycode 21 = +U+0079 +U+0059 U+2190 U+00a5 Control_y Control_y Control_y Control_y Meta_y Meta_Y Meta_y Meta_Y Meta_Control_y Meta_Control_y Meta_Control_y Meta_Control_y +U+0079 +U+0059 U+2190 U+00a5 Control_y Control_y Control_y Control_y Meta_y Meta_Y Meta_y Meta_Y Meta_Control_y Meta_Control_y Meta_Control_y Meta_Control_y +U+0079 +U+0059 U+2190 U+00a5 Control_y Control_y Control_y Control_y Meta_y Meta_Y Meta_y Meta_Y Meta_Control_y Meta_Control_y Meta_Control_y Meta_Control_y +U+0079 +U+0059 U+2190 U+00a5 Control_y Control_y Control_y Control_y Meta_y Meta_Y Meta_y Meta_Y Meta_Control_y Meta_Control_y Meta_Control_y Meta_Control_y +U+0059 +U+0079 U+2190 U+00a5 Control_y Control_y Control_y Control_y Meta_y Meta_Y Meta_y Meta_Y Meta_Control_y Meta_Control_y Meta_Control_y Meta_Control_y +U+0059 +U+0079 U+2190 U+00a5 Control_y Control_y Control_y Control_y Meta_y Meta_Y Meta_y Meta_Y Meta_Control_y Meta_Control_y Meta_Control_y Meta_Control_y +U+0059 +U+0079 U+2190 U+00a5 Control_y Control_y Control_y Control_y Meta_y Meta_Y Meta_y Meta_Y Meta_Control_y Meta_Control_y Meta_Control_y Meta_Control_y +U+0059 +U+0079 U+2190 U+00a5 Control_y Control_y Control_y Control_y Meta_y Meta_Y Meta_y Meta_Y Meta_Control_y Meta_Control_y Meta_Control_y Meta_Control_y @@ -24,11 +24,11 @@ keycode 22 = +U+0075 +U+0055 U+2193 U+2191 Control_u Control_u Control_u Control keycode 23 = +U+0069 +U+0049 U+2192 +U+0131 Tab Tab Tab Tab Meta_i Meta_I Meta_i Meta_I Meta_Tab Meta_Tab Meta_Tab Meta_Tab +U+0069 +U+0049 U+2192 +U+0131 Tab Tab Tab Tab Meta_i Meta_I Meta_i Meta_I Meta_Tab Meta_Tab Meta_Tab Meta_Tab +U+0069 +U+0049 U+2192 +U+0131 Tab Tab Tab Tab Meta_i Meta_I Meta_i Meta_I Meta_Tab Meta_Tab Meta_Tab Meta_Tab +U+0069 +U+0049 U+2192 +U+0131 Tab Tab Tab Tab Meta_i Meta_I Meta_i Meta_I Meta_Tab Meta_Tab Meta_Tab Meta_Tab +U+0049 +U+0069 U+2192 +U+0049 Tab Tab Tab Tab Meta_i Meta_I Meta_i Meta_I Meta_Tab Meta_Tab Meta_Tab Meta_Tab +U+0049 +U+0069 U+2192 +U+0049 Tab Tab Tab Tab Meta_i Meta_I Meta_i Meta_I Meta_Tab Meta_Tab Meta_Tab Meta_Tab +U+0049 +U+0069 U+2192 +U+0049 Tab Tab Tab Tab Meta_i Meta_I Meta_i Meta_I Meta_Tab Meta_Tab Meta_Tab Meta_Tab +U+0049 +U+0069 U+2192 +U+0049 Tab Tab Tab Tab Meta_i Meta_I Meta_i Meta_I Meta_Tab Meta_Tab Meta_Tab Meta_Tab keycode 24 = +U+006f +U+004f +U+00f8 +U+00d8 Control_o Control_o Control_o Control_o Meta_o Meta_O Meta_o Meta_O Meta_Control_o Meta_Control_o Meta_Control_o Meta_Control_o +U+006f +U+004f +U+00f8 +U+00d8 Control_o Control_o Control_o Control_o Meta_o Meta_O Meta_o Meta_O Meta_Control_o Meta_Control_o Meta_Control_o Meta_Control_o +U+006f +U+004f +U+00f8 +U+00d8 Control_o Control_o Control_o Control_o Meta_o Meta_O Meta_o Meta_O Meta_Control_o Meta_Control_o Meta_Control_o Meta_Control_o +U+006f +U+004f +U+00f8 +U+00d8 Control_o Control_o Control_o Control_o Meta_o Meta_O Meta_o Meta_O Meta_Control_o Meta_Control_o Meta_Control_o Meta_Control_o +U+004f +U+006f +U+00d8 +U+00f8 Control_o Control_o Control_o Control_o Meta_o Meta_O Meta_o Meta_O Meta_Control_o Meta_Control_o Meta_Control_o Meta_Control_o +U+004f +U+006f +U+00d8 +U+00f8 Control_o Control_o Control_o Control_o Meta_o Meta_O Meta_o Meta_O Meta_Control_o Meta_Control_o Meta_Control_o Meta_Control_o +U+004f +U+006f +U+00d8 +U+00f8 Control_o Control_o Control_o Control_o Meta_o Meta_O Meta_o Meta_O Meta_Control_o Meta_Control_o Meta_Control_o Meta_Control_o +U+004f +U+006f +U+00d8 +U+00f8 Control_o Control_o Control_o Control_o Meta_o Meta_O Meta_o Meta_O Meta_Control_o Meta_Control_o Meta_Control_o Meta_Control_o keycode 25 = +U+0070 +U+0050 +U+00fe +U+00de Control_p Control_p Control_p Control_p Meta_p Meta_P Meta_p Meta_P Meta_Control_p Meta_Control_p Meta_Control_p Meta_Control_p +U+0070 +U+0050 +U+00fe +U+00de Control_p Control_p Control_p Control_p Meta_p Meta_P Meta_p Meta_P Meta_Control_p Meta_Control_p Meta_Control_p Meta_Control_p +U+0070 +U+0050 +U+00fe +U+00de Control_p Control_p Control_p Control_p Meta_p Meta_P Meta_p Meta_P Meta_Control_p Meta_Control_p Meta_Control_p Meta_Control_p +U+0070 +U+0050 +U+00fe +U+00de Control_p Control_p Control_p Control_p Meta_p Meta_P Meta_p Meta_P Meta_Control_p Meta_Control_p Meta_Control_p Meta_Control_p +U+0050 +U+0070 +U+00de +U+00fe Control_p Control_p Control_p Control_p Meta_p Meta_P Meta_p Meta_P Meta_Control_p Meta_Control_p Meta_Control_p Meta_Control_p +U+0050 +U+0070 +U+00de +U+00fe Control_p Control_p Control_p Control_p Meta_p Meta_P Meta_p Meta_P Meta_Control_p Meta_Control_p Meta_Control_p Meta_Control_p +U+0050 +U+0070 +U+00de +U+00fe Control_p Control_p Control_p Control_p Meta_p Meta_P Meta_p Meta_P Meta_Control_p Meta_Control_p Meta_Control_p Meta_Control_p +U+0050 +U+0070 +U+00de +U+00fe Control_p Control_p Control_p Control_p Meta_p Meta_P Meta_p Meta_P Meta_Control_p Meta_Control_p Meta_Control_p Meta_Control_p -keycode 26 = U+005b U+007b dead_diaeresis U+002a Escape Escape dead_diaeresis dead_diaeresis Meta_bracketleft Meta_braceleft dead_diaeresis Meta_asterisk Meta_Escape Meta_Escape dead_diaeresis dead_diaeresis U+005b U+007b dead_diaeresis U+002a Escape Escape dead_diaeresis dead_diaeresis Meta_bracketleft Meta_braceleft dead_diaeresis Meta_asterisk Meta_Escape Meta_Escape dead_diaeresis dead_diaeresis U+005b U+007b dead_diaeresis U+002a Escape Escape dead_diaeresis dead_diaeresis Meta_bracketleft Meta_braceleft dead_diaeresis Meta_asterisk Meta_Escape Meta_Escape dead_diaeresis dead_diaeresis U+005b U+007b dead_diaeresis U+002a Escape Escape dead_diaeresis dead_diaeresis Meta_bracketleft Meta_braceleft dead_diaeresis Meta_asterisk Meta_Escape Meta_Escape dead_diaeresis dead_diaeresis U+005b U+007b dead_diaeresis U+002a Escape Escape dead_diaeresis dead_diaeresis Meta_bracketleft Meta_braceleft dead_diaeresis Meta_asterisk Meta_Escape Meta_Escape dead_diaeresis dead_diaeresis U+005b U+007b dead_diaeresis U+002a Escape Escape dead_diaeresis dead_diaeresis Meta_bracketleft Meta_braceleft dead_diaeresis Meta_asterisk Meta_Escape Meta_Escape dead_diaeresis dead_diaeresis U+005b U+007b dead_diaeresis U+002a Escape Escape dead_diaeresis dead_diaeresis Meta_bracketleft Meta_braceleft dead_diaeresis Meta_asterisk Meta_Escape Meta_Escape dead_diaeresis dead_diaeresis U+005b U+007b dead_diaeresis U+002a Escape Escape dead_diaeresis dead_diaeresis Meta_bracketleft Meta_braceleft dead_diaeresis Meta_asterisk Meta_Escape Meta_Escape dead_diaeresis dead_diaeresis -keycode 27 = U+005d U+007d dead_tilde U+005f Control_bracketright Control_bracketright dead_tilde Control_underscore Meta_bracketright Meta_braceright dead_tilde Meta_underscore Meta_Control_bracketright Meta_Control_bracketright dead_tilde Meta_Control_underscore U+005d U+007d dead_tilde U+005f Control_bracketright Control_bracketright dead_tilde Control_underscore Meta_bracketright Meta_braceright dead_tilde Meta_underscore Meta_Control_bracketright Meta_Control_bracketright dead_tilde Meta_Control_underscore U+005d U+007d dead_tilde U+005f Control_bracketright Control_bracketright dead_tilde Control_underscore Meta_bracketright Meta_braceright dead_tilde Meta_underscore Meta_Control_bracketright Meta_Control_bracketright dead_tilde Meta_Control_underscore U+005d U+007d dead_tilde U+005f Control_bracketright Control_bracketright dead_tilde Control_underscore Meta_bracketright Meta_braceright dead_tilde Meta_underscore Meta_Control_bracketright Meta_Control_bracketright dead_tilde Meta_Control_underscore U+005d U+007d dead_tilde U+005f Control_bracketright Control_bracketright dead_tilde Control_underscore Meta_bracketright Meta_braceright dead_tilde Meta_underscore Meta_Control_bracketright Meta_Control_bracketright dead_tilde Meta_Control_underscore U+005d U+007d dead_tilde U+005f Control_bracketright Control_bracketright dead_tilde Control_underscore Meta_bracketright Meta_braceright dead_tilde Meta_underscore Meta_Control_bracketright Meta_Control_bracketright dead_tilde Meta_Control_underscore U+005d U+007d dead_tilde U+005f Control_bracketright Control_bracketright dead_tilde Control_underscore Meta_bracketright Meta_braceright dead_tilde Meta_underscore Meta_Control_bracketright Meta_Control_bracketright dead_tilde Meta_Control_underscore U+005d U+007d dead_tilde U+005f Control_bracketright Control_bracketright dead_tilde Control_underscore Meta_bracketright Meta_braceright dead_tilde Meta_underscore Meta_Control_bracketright Meta_Control_bracketright dead_tilde Meta_Control_underscore +keycode 26 = dead_circumflex dead_diaeresis dead_diaeresis U+002a dead_circumflex dead_diaeresis dead_diaeresis dead_diaeresis dead_circumflex dead_diaeresis dead_diaeresis Meta_asterisk dead_circumflex dead_diaeresis dead_diaeresis dead_diaeresis dead_circumflex dead_diaeresis dead_diaeresis U+002a dead_circumflex dead_diaeresis dead_diaeresis dead_diaeresis dead_circumflex dead_diaeresis dead_diaeresis Meta_asterisk dead_circumflex dead_diaeresis dead_diaeresis dead_diaeresis dead_circumflex dead_diaeresis dead_diaeresis U+002a dead_circumflex dead_diaeresis dead_diaeresis dead_diaeresis dead_circumflex dead_diaeresis dead_diaeresis Meta_asterisk dead_circumflex dead_diaeresis dead_diaeresis dead_diaeresis dead_circumflex dead_diaeresis dead_diaeresis U+002a dead_circumflex dead_diaeresis dead_diaeresis dead_diaeresis dead_circumflex dead_diaeresis dead_diaeresis Meta_asterisk dead_circumflex dead_diaeresis dead_diaeresis dead_diaeresis dead_circumflex dead_diaeresis dead_diaeresis U+002a dead_circumflex dead_diaeresis dead_diaeresis dead_diaeresis dead_circumflex dead_diaeresis dead_diaeresis Meta_asterisk dead_circumflex dead_diaeresis dead_diaeresis dead_diaeresis dead_circumflex dead_diaeresis dead_diaeresis U+002a dead_circumflex dead_diaeresis dead_diaeresis dead_diaeresis dead_circumflex dead_diaeresis dead_diaeresis Meta_asterisk dead_circumflex dead_diaeresis dead_diaeresis dead_diaeresis dead_circumflex dead_diaeresis dead_diaeresis U+002a dead_circumflex dead_diaeresis dead_diaeresis dead_diaeresis dead_circumflex dead_diaeresis dead_diaeresis Meta_asterisk dead_circumflex dead_diaeresis dead_diaeresis dead_diaeresis dead_circumflex dead_diaeresis dead_diaeresis U+002a dead_circumflex dead_diaeresis dead_diaeresis dead_diaeresis dead_circumflex dead_diaeresis dead_diaeresis Meta_asterisk dead_circumflex dead_diaeresis dead_diaeresis dead_diaeresis +keycode 27 = U+0024 U+00a3 U+00a4 U+005f Control_underscore Control_underscore Control_underscore Control_underscore Meta_dollar Meta_dollar Meta_dollar Meta_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore U+0024 U+00a3 U+00a4 U+005f Control_underscore Control_underscore Control_underscore Control_underscore Meta_dollar Meta_dollar Meta_dollar Meta_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore U+0024 U+00a3 U+00a4 U+005f Control_underscore Control_underscore Control_underscore Control_underscore Meta_dollar Meta_dollar Meta_dollar Meta_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore U+0024 U+00a3 U+00a4 U+005f Control_underscore Control_underscore Control_underscore Control_underscore Meta_dollar Meta_dollar Meta_dollar Meta_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore U+0024 U+00a3 U+00a4 U+005f Control_underscore Control_underscore Control_underscore Control_underscore Meta_dollar Meta_dollar Meta_dollar Meta_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore U+0024 U+00a3 U+00a4 U+005f Control_underscore Control_underscore Control_underscore Control_underscore Meta_dollar Meta_dollar Meta_dollar Meta_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore U+0024 U+00a3 U+00a4 U+005f Control_underscore Control_underscore Control_underscore Control_underscore Meta_dollar Meta_dollar Meta_dollar Meta_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore U+0024 U+00a3 U+00a4 U+005f Control_underscore Control_underscore Control_underscore Control_underscore Meta_dollar Meta_dollar Meta_dollar Meta_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore Meta_Control_underscore keycode 28 = Return Return Return Return Control_m Control_m Control_m Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Return Return Return Return Control_m Control_m Control_m Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Return Return Return Return Control_m Control_m Control_m Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Return Return Return Return Control_m Control_m Control_m Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Return Return Return Return Control_m Control_m Control_m Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Return Return Return Return Control_m Control_m Control_m Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Return Return Return Return Control_m Control_m Control_m Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Return Return Return Return Control_m Control_m Control_m Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m keycode 29 = Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control Control -keycode 30 = +U+0061 +U+0041 +U+00e6 +U+00c6 Control_a Control_a Control_a Control_a Meta_a Meta_A Meta_a Meta_A Meta_Control_a Meta_Control_a Meta_Control_a Meta_Control_a +U+0061 +U+0041 +U+00e6 +U+00c6 Control_a Control_a Control_a Control_a Meta_a Meta_A Meta_a Meta_A Meta_Control_a Meta_Control_a Meta_Control_a Meta_Control_a +U+0061 +U+0041 +U+00e6 +U+00c6 Control_a Control_a Control_a Control_a Meta_a Meta_A Meta_a Meta_A Meta_Control_a Meta_Control_a Meta_Control_a Meta_Control_a +U+0061 +U+0041 +U+00e6 +U+00c6 Control_a Control_a Control_a Control_a Meta_a Meta_A Meta_a Meta_A Meta_Control_a Meta_Control_a Meta_Control_a Meta_Control_a +U+0041 +U+0061 +U+00c6 +U+00e6 Control_a Control_a Control_a Control_a Meta_a Meta_A Meta_a Meta_A Meta_Control_a Meta_Control_a Meta_Control_a Meta_Control_a +U+0041 +U+0061 +U+00c6 +U+00e6 Control_a Control_a Control_a Control_a Meta_a Meta_A Meta_a Meta_A Meta_Control_a Meta_Control_a Meta_Control_a Meta_Control_a +U+0041 +U+0061 +U+00c6 +U+00e6 Control_a Control_a Control_a Control_a Meta_a Meta_A Meta_a Meta_A Meta_Control_a Meta_Control_a Meta_Control_a Meta_Control_a +U+0041 +U+0061 +U+00c6 +U+00e6 Control_a Control_a Control_a Control_a Meta_a Meta_A Meta_a Meta_A Meta_Control_a Meta_Control_a Meta_Control_a Meta_Control_a +keycode 30 = +U+0071 +U+0051 U+0040 +U+03a9 Control_q Control_q nul nul Meta_q Meta_Q Meta_at Meta_at Meta_Control_q Meta_Control_q Meta_nul Meta_nul +U+0071 +U+0051 U+0040 +U+03a9 Control_q Control_q nul nul Meta_q Meta_Q Meta_at Meta_at Meta_Control_q Meta_Control_q Meta_nul Meta_nul +U+0071 +U+0051 U+0040 +U+03a9 Control_q Control_q nul nul Meta_q Meta_Q Meta_at Meta_at Meta_Control_q Meta_Control_q Meta_nul Meta_nul +U+0071 +U+0051 U+0040 +U+03a9 Control_q Control_q nul nul Meta_q Meta_Q Meta_at Meta_at Meta_Control_q Meta_Control_q Meta_nul Meta_nul +U+0051 +U+0071 U+0040 +U+03c9 Control_q Control_q nul nul Meta_q Meta_Q Meta_at Meta_at Meta_Control_q Meta_Control_q Meta_nul Meta_nul +U+0051 +U+0071 U+0040 +U+03c9 Control_q Control_q nul nul Meta_q Meta_Q Meta_at Meta_at Meta_Control_q Meta_Control_q Meta_nul Meta_nul +U+0051 +U+0071 U+0040 +U+03c9 Control_q Control_q nul nul Meta_q Meta_Q Meta_at Meta_at Meta_Control_q Meta_Control_q Meta_nul Meta_nul +U+0051 +U+0071 U+0040 +U+03c9 Control_q Control_q nul nul Meta_q Meta_Q Meta_at Meta_at Meta_Control_q Meta_Control_q Meta_nul Meta_nul keycode 31 = +U+0073 +U+0053 +U+00df U+00a7 Control_s Control_s Control_s Control_s Meta_s Meta_S Meta_s Meta_S Meta_Control_s Meta_Control_s Meta_Control_s Meta_Control_s +U+0073 +U+0053 +U+00df U+00a7 Control_s Control_s Control_s Control_s Meta_s Meta_S Meta_s Meta_S Meta_Control_s Meta_Control_s Meta_Control_s Meta_Control_s +U+0073 +U+0053 +U+00df U+00a7 Control_s Control_s Control_s Control_s Meta_s Meta_S Meta_s Meta_S Meta_Control_s Meta_Control_s Meta_Control_s Meta_Control_s +U+0073 +U+0053 +U+00df U+00a7 Control_s Control_s Control_s Control_s Meta_s Meta_S Meta_s Meta_S Meta_Control_s Meta_Control_s Meta_Control_s Meta_Control_s +U+0053 +U+0073 +U+0053 U+00a7 Control_s Control_s Control_s Control_s Meta_s Meta_S Meta_s Meta_S Meta_Control_s Meta_Control_s Meta_Control_s Meta_Control_s +U+0053 +U+0073 +U+0053 U+00a7 Control_s Control_s Control_s Control_s Meta_s Meta_S Meta_s Meta_S Meta_Control_s Meta_Control_s Meta_Control_s Meta_Control_s +U+0053 +U+0073 +U+0053 U+00a7 Control_s Control_s Control_s Control_s Meta_s Meta_S Meta_s Meta_S Meta_Control_s Meta_Control_s Meta_Control_s Meta_Control_s +U+0053 +U+0073 +U+0053 U+00a7 Control_s Control_s Control_s Control_s Meta_s Meta_S Meta_s Meta_S Meta_Control_s Meta_Control_s Meta_Control_s Meta_Control_s keycode 32 = +U+0064 +U+0044 +U+00f0 +U+00d0 Control_d Control_d Control_d Control_d Meta_d Meta_D Meta_d Meta_D Meta_Control_d Meta_Control_d Meta_Control_d Meta_Control_d +U+0064 +U+0044 +U+00f0 +U+00d0 Control_d Control_d Control_d Control_d Meta_d Meta_D Meta_d Meta_D Meta_Control_d Meta_Control_d Meta_Control_d Meta_Control_d +U+0064 +U+0044 +U+00f0 +U+00d0 Control_d Control_d Control_d Control_d Meta_d Meta_D Meta_d Meta_D Meta_Control_d Meta_Control_d Meta_Control_d Meta_Control_d +U+0064 +U+0044 +U+00f0 +U+00d0 Control_d Control_d Control_d Control_d Meta_d Meta_D Meta_d Meta_D Meta_Control_d Meta_Control_d Meta_Control_d Meta_Control_d +U+0044 +U+0064 +U+00d0 +U+00f0 Control_d Control_d Control_d Control_d Meta_d Meta_D Meta_d Meta_D Meta_Control_d Meta_Control_d Meta_Control_d Meta_Control_d +U+0044 +U+0064 +U+00d0 +U+00f0 Control_d Control_d Control_d Control_d Meta_d Meta_D Meta_d Meta_D Meta_Control_d Meta_Control_d Meta_Control_d Meta_Control_d +U+0044 +U+0064 +U+00d0 +U+00f0 Control_d Control_d Control_d Control_d Meta_d Meta_D Meta_d Meta_D Meta_Control_d Meta_Control_d Meta_Control_d Meta_Control_d +U+0044 +U+0064 +U+00d0 +U+00f0 Control_d Control_d Control_d Control_d Meta_d Meta_D Meta_d Meta_D Meta_Control_d Meta_Control_d Meta_Control_d Meta_Control_d keycode 33 = +U+0066 +U+0046 +U+0111 +U+00aa Control_f Control_f Control_f Control_f Meta_f Meta_F Meta_f Meta_F Meta_Control_f Meta_Control_f Meta_Control_f Meta_Control_f +U+0066 +U+0046 +U+0111 +U+00aa Control_f Control_f Control_f Control_f Meta_f Meta_F Meta_f Meta_F Meta_Control_f Meta_Control_f Meta_Control_f Meta_Control_f +U+0066 +U+0046 +U+0111 +U+00aa Control_f Control_f Control_f Control_f Meta_f Meta_F Meta_f Meta_F Meta_Control_f Meta_Control_f Meta_Control_f Meta_Control_f +U+0066 +U+0046 +U+0111 +U+00aa Control_f Control_f Control_f Control_f Meta_f Meta_F Meta_f Meta_F Meta_Control_f Meta_Control_f Meta_Control_f Meta_Control_f +U+0046 +U+0066 +U+0110 +U+00aa Control_f Control_f Control_f Control_f Meta_f Meta_F Meta_f Meta_F Meta_Control_f Meta_Control_f Meta_Control_f Meta_Control_f +U+0046 +U+0066 +U+0110 +U+00aa Control_f Control_f Control_f Control_f Meta_f Meta_F Meta_f Meta_F Meta_Control_f Meta_Control_f Meta_Control_f Meta_Control_f +U+0046 +U+0066 +U+0110 +U+00aa Control_f Control_f Control_f Control_f Meta_f Meta_F Meta_f Meta_F Meta_Control_f Meta_Control_f Meta_Control_f Meta_Control_f +U+0046 +U+0066 +U+0110 +U+00aa Control_f Control_f Control_f Control_f Meta_f Meta_F Meta_f Meta_F Meta_Control_f Meta_Control_f Meta_Control_f Meta_Control_f @@ -37,21 +37,21 @@ keycode 35 = +U+0068 +U+0048 +U+0127 +U+0126 BackSpace BackSpace BackSpace BackS keycode 36 = +U+006a +U+004a U+0309 U+031b Linefeed Linefeed Linefeed Linefeed Meta_j Meta_J Meta_j Meta_J Meta_Linefeed Meta_Linefeed Meta_Linefeed Meta_Linefeed +U+006a +U+004a U+0309 U+031b Linefeed Linefeed Linefeed Linefeed Meta_j Meta_J Meta_j Meta_J Meta_Linefeed Meta_Linefeed Meta_Linefeed Meta_Linefeed +U+006a +U+004a U+0309 U+031b Linefeed Linefeed Linefeed Linefeed Meta_j Meta_J Meta_j Meta_J Meta_Linefeed Meta_Linefeed Meta_Linefeed Meta_Linefeed +U+006a +U+004a U+0309 U+031b Linefeed Linefeed Linefeed Linefeed Meta_j Meta_J Meta_j Meta_J Meta_Linefeed Meta_Linefeed Meta_Linefeed Meta_Linefeed +U+004a +U+006a U+0309 U+031b Linefeed Linefeed Linefeed Linefeed Meta_j Meta_J Meta_j Meta_J Meta_Linefeed Meta_Linefeed Meta_Linefeed Meta_Linefeed +U+004a +U+006a U+0309 U+031b Linefeed Linefeed Linefeed Linefeed Meta_j Meta_J Meta_j Meta_J Meta_Linefeed Meta_Linefeed Meta_Linefeed Meta_Linefeed +U+004a +U+006a U+0309 U+031b Linefeed Linefeed Linefeed Linefeed Meta_j Meta_J Meta_j Meta_J Meta_Linefeed Meta_Linefeed Meta_Linefeed Meta_Linefeed +U+004a +U+006a U+0309 U+031b Linefeed Linefeed Linefeed Linefeed Meta_j Meta_J Meta_j Meta_J Meta_Linefeed Meta_Linefeed Meta_Linefeed Meta_Linefeed keycode 37 = +U+006b +U+004b +U+0138 U+0026 Control_k Control_k Control_k Control_k Meta_k Meta_K Meta_k Meta_ampersand Meta_Control_k Meta_Control_k Meta_Control_k Meta_Control_k +U+006b +U+004b +U+0138 U+0026 Control_k Control_k Control_k Control_k Meta_k Meta_K Meta_k Meta_ampersand Meta_Control_k Meta_Control_k Meta_Control_k Meta_Control_k +U+006b +U+004b +U+0138 U+0026 Control_k Control_k Control_k Control_k Meta_k Meta_K Meta_k Meta_ampersand Meta_Control_k Meta_Control_k Meta_Control_k Meta_Control_k +U+006b +U+004b +U+0138 U+0026 Control_k Control_k Control_k Control_k Meta_k Meta_K Meta_k Meta_ampersand Meta_Control_k Meta_Control_k Meta_Control_k Meta_Control_k +U+004b +U+006b +U+0138 U+0026 Control_k Control_k Control_k Control_k Meta_k Meta_K Meta_k Meta_ampersand Meta_Control_k Meta_Control_k Meta_Control_k Meta_Control_k +U+004b +U+006b +U+0138 U+0026 Control_k Control_k Control_k Control_k Meta_k Meta_K Meta_k Meta_ampersand Meta_Control_k Meta_Control_k Meta_Control_k Meta_Control_k +U+004b +U+006b +U+0138 U+0026 Control_k Control_k Control_k Control_k Meta_k Meta_K Meta_k Meta_ampersand Meta_Control_k Meta_Control_k Meta_Control_k Meta_Control_k +U+004b +U+006b +U+0138 U+0026 Control_k Control_k Control_k Control_k Meta_k Meta_K Meta_k Meta_ampersand Meta_Control_k Meta_Control_k Meta_Control_k Meta_Control_k keycode 38 = +U+006c +U+004c +U+0142 +U+0141 Control_l Control_l Control_l Control_l Meta_l Meta_L Meta_l Meta_L Meta_Control_l Meta_Control_l Meta_Control_l Meta_Control_l +U+006c +U+004c +U+0142 +U+0141 Control_l Control_l Control_l Control_l Meta_l Meta_L Meta_l Meta_L Meta_Control_l Meta_Control_l Meta_Control_l Meta_Control_l +U+006c +U+004c +U+0142 +U+0141 Control_l Control_l Control_l Control_l Meta_l Meta_L Meta_l Meta_L Meta_Control_l Meta_Control_l Meta_Control_l Meta_Control_l +U+006c +U+004c +U+0142 +U+0141 Control_l Control_l Control_l Control_l Meta_l Meta_L Meta_l Meta_L Meta_Control_l Meta_Control_l Meta_Control_l Meta_Control_l +U+004c +U+006c +U+0141 +U+0142 Control_l Control_l Control_l Control_l Meta_l Meta_L Meta_l Meta_L Meta_Control_l Meta_Control_l Meta_Control_l Meta_Control_l +U+004c +U+006c +U+0141 +U+0142 Control_l Control_l Control_l Control_l Meta_l Meta_L Meta_l Meta_L Meta_Control_l Meta_Control_l Meta_Control_l Meta_Control_l +U+004c +U+006c +U+0141 +U+0142 Control_l Control_l Control_l Control_l Meta_l Meta_L Meta_l Meta_L Meta_Control_l Meta_Control_l Meta_Control_l Meta_Control_l +U+004c +U+006c +U+0141 +U+0142 Control_l Control_l Control_l Control_l Meta_l Meta_L Meta_l Meta_L Meta_Control_l Meta_Control_l Meta_Control_l Meta_Control_l -keycode 39 = U+003b U+003a dead_acute dead_doubleacute dead_acute dead_doubleacute dead_acute dead_doubleacute Meta_semicolon Meta_colon dead_acute dead_doubleacute dead_acute dead_doubleacute dead_acute dead_doubleacute U+003b U+003a dead_acute dead_doubleacute dead_acute dead_doubleacute dead_acute dead_doubleacute Meta_semicolon Meta_colon dead_acute dead_doubleacute dead_acute dead_doubleacute dead_acute dead_doubleacute U+003b U+003a dead_acute dead_doubleacute dead_acute dead_doubleacute dead_acute dead_doubleacute Meta_semicolon Meta_colon dead_acute dead_doubleacute dead_acute dead_doubleacute dead_acute dead_doubleacute U+003b U+003a dead_acute dead_doubleacute dead_acute dead_doubleacute dead_acute dead_doubleacute Meta_semicolon Meta_colon dead_acute dead_doubleacute dead_acute dead_doubleacute dead_acute dead_doubleacute U+003b U+003a dead_acute dead_doubleacute dead_acute dead_doubleacute dead_acute dead_doubleacute Meta_semicolon Meta_colon dead_acute dead_doubleacute dead_acute dead_doubleacute dead_acute dead_doubleacute U+003b U+003a dead_acute dead_doubleacute dead_acute dead_doubleacute dead_acute dead_doubleacute Meta_semicolon Meta_colon dead_acute dead_doubleacute dead_acute dead_doubleacute dead_acute dead_doubleacute U+003b U+003a dead_acute dead_doubleacute dead_acute dead_doubleacute dead_acute dead_doubleacute Meta_semicolon Meta_colon dead_acute dead_doubleacute dead_acute dead_doubleacute dead_acute dead_doubleacute U+003b U+003a dead_acute dead_doubleacute dead_acute dead_doubleacute dead_acute dead_doubleacute Meta_semicolon Meta_colon dead_acute dead_doubleacute dead_acute dead_doubleacute dead_acute dead_doubleacute -keycode 40 = U+0027 U+0040 dead_circumflex dead_caron Control_g nul dead_circumflex dead_caron Meta_apostrophe Meta_at dead_circumflex dead_caron Meta_Control_g Meta_nul dead_circumflex dead_caron U+0027 U+0040 dead_circumflex dead_caron Control_g nul dead_circumflex dead_caron Meta_apostrophe Meta_at dead_circumflex dead_caron Meta_Control_g Meta_nul dead_circumflex dead_caron U+0027 U+0040 dead_circumflex dead_caron Control_g nul dead_circumflex dead_caron Meta_apostrophe Meta_at dead_circumflex dead_caron Meta_Control_g Meta_nul dead_circumflex dead_caron U+0027 U+0040 dead_circumflex dead_caron Control_g nul dead_circumflex dead_caron Meta_apostrophe Meta_at dead_circumflex dead_caron Meta_Control_g Meta_nul dead_circumflex dead_caron U+0027 U+0040 dead_circumflex dead_caron Control_g nul dead_circumflex dead_caron Meta_apostrophe Meta_at dead_circumflex dead_caron Meta_Control_g Meta_nul dead_circumflex dead_caron U+0027 U+0040 dead_circumflex dead_caron Control_g nul dead_circumflex dead_caron Meta_apostrophe Meta_at dead_circumflex dead_caron Meta_Control_g Meta_nul dead_circumflex dead_caron U+0027 U+0040 dead_circumflex dead_caron Control_g nul dead_circumflex dead_caron Meta_apostrophe Meta_at dead_circumflex dead_caron Meta_Control_g Meta_nul dead_circumflex dead_caron U+0027 U+0040 dead_circumflex dead_caron Control_g nul dead_circumflex dead_caron Meta_apostrophe Meta_at dead_circumflex dead_caron Meta_Control_g Meta_nul dead_circumflex dead_caron -keycode 41 = U+0060 U+00ac U+007c U+007c nul nul nul nul Meta_grave Meta_grave Meta_bar Meta_bar Meta_nul Meta_nul Meta_nul Meta_nul U+0060 U+00ac U+007c U+007c nul nul nul nul Meta_grave Meta_grave Meta_bar Meta_bar Meta_nul Meta_nul Meta_nul Meta_nul U+0060 U+00ac U+007c U+007c nul nul nul nul Meta_grave Meta_grave Meta_bar Meta_bar Meta_nul Meta_nul Meta_nul Meta_nul U+0060 U+00ac U+007c U+007c nul nul nul nul Meta_grave Meta_grave Meta_bar Meta_bar Meta_nul Meta_nul Meta_nul Meta_nul U+0060 U+00ac U+007c U+007c nul nul nul nul Meta_grave Meta_grave Meta_bar Meta_bar Meta_nul Meta_nul Meta_nul Meta_nul U+0060 U+00ac U+007c U+007c nul nul nul nul Meta_grave Meta_grave Meta_bar Meta_bar Meta_nul Meta_nul Meta_nul Meta_nul U+0060 U+00ac U+007c U+007c nul nul nul nul Meta_grave Meta_grave Meta_bar Meta_bar Meta_nul Meta_nul Meta_nul Meta_nul U+0060 U+00ac U+007c U+007c nul nul nul nul Meta_grave Meta_grave Meta_bar Meta_bar Meta_nul Meta_nul Meta_nul Meta_nul +keycode 39 = +U+006d +U+004d +U+00b5 +U+00ba Control_m Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_M Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m +U+006d +U+004d +U+00b5 +U+00ba Control_m Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_M Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m +U+006d +U+004d +U+00b5 +U+00ba Control_m Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_M Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m +U+006d +U+004d +U+00b5 +U+00ba Control_m Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_M Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m +U+004d +U+006d +U+039c +U+00ba Control_m Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_M Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m +U+004d +U+006d +U+039c +U+00ba Control_m Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_M Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m +U+004d +U+006d +U+039c +U+00ba Control_m Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_M Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m +U+004d +U+006d +U+039c +U+00ba Control_m Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_M Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m +keycode 40 = +U+00f9 U+0025 dead_circumflex dead_caron dead_circumflex dead_caron dead_circumflex dead_caron Meta_percent Meta_percent dead_circumflex dead_caron dead_circumflex dead_caron dead_circumflex dead_caron +U+00f9 U+0025 dead_circumflex dead_caron dead_circumflex dead_caron dead_circumflex dead_caron Meta_percent Meta_percent dead_circumflex dead_caron dead_circumflex dead_caron dead_circumflex dead_caron +U+00f9 U+0025 dead_circumflex dead_caron dead_circumflex dead_caron dead_circumflex dead_caron Meta_percent Meta_percent dead_circumflex dead_caron dead_circumflex dead_caron dead_circumflex dead_caron +U+00f9 U+0025 dead_circumflex dead_caron dead_circumflex dead_caron dead_circumflex dead_caron Meta_percent Meta_percent dead_circumflex dead_caron dead_circumflex dead_caron dead_circumflex dead_caron +U+00d9 U+0025 dead_circumflex dead_caron dead_circumflex dead_caron dead_circumflex dead_caron Meta_percent Meta_percent dead_circumflex dead_caron dead_circumflex dead_caron dead_circumflex dead_caron +U+00d9 U+0025 dead_circumflex dead_caron dead_circumflex dead_caron dead_circumflex dead_caron Meta_percent Meta_percent dead_circumflex dead_caron dead_circumflex dead_caron dead_circumflex dead_caron +U+00d9 U+0025 dead_circumflex dead_caron dead_circumflex dead_caron dead_circumflex dead_caron Meta_percent Meta_percent dead_circumflex dead_caron dead_circumflex dead_caron dead_circumflex dead_caron +U+00d9 U+0025 dead_circumflex dead_caron dead_circumflex dead_caron dead_circumflex dead_caron Meta_percent Meta_percent dead_circumflex dead_caron dead_circumflex dead_caron dead_circumflex dead_caron +keycode 41 = U+00b2 U+007e U+00ac U+00ac VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_asciitilde Meta_asciitilde Meta_asciitilde Meta_asciitilde VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+00b2 U+007e U+00ac U+00ac VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_asciitilde Meta_asciitilde Meta_asciitilde Meta_asciitilde VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+00b2 U+007e U+00ac U+00ac VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_asciitilde Meta_asciitilde Meta_asciitilde Meta_asciitilde VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+00b2 U+007e U+00ac U+00ac VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_asciitilde Meta_asciitilde Meta_asciitilde Meta_asciitilde VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+00b2 U+007e U+00ac U+00ac VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_asciitilde Meta_asciitilde Meta_asciitilde Meta_asciitilde VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+00b2 U+007e U+00ac U+00ac VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_asciitilde Meta_asciitilde Meta_asciitilde Meta_asciitilde VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+00b2 U+007e U+00ac U+00ac VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_asciitilde Meta_asciitilde Meta_asciitilde Meta_asciitilde VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+00b2 U+007e U+00ac U+00ac VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_asciitilde Meta_asciitilde Meta_asciitilde Meta_asciitilde VoidSymbol VoidSymbol VoidSymbol VoidSymbol keycode 42 = Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift -keycode 43 = U+0023 U+007e dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve Meta_numbersign Meta_asciitilde dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve U+0023 U+007e dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve Meta_numbersign Meta_asciitilde dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve U+0023 U+007e dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve Meta_numbersign Meta_asciitilde dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve U+0023 U+007e dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve Meta_numbersign Meta_asciitilde dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve U+0023 U+007e dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve Meta_numbersign Meta_asciitilde dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve U+0023 U+007e dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve Meta_numbersign Meta_asciitilde dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve U+0023 U+007e dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve Meta_numbersign Meta_asciitilde dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve U+0023 U+007e dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve Meta_numbersign Meta_asciitilde dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve -keycode 44 = +U+007a +U+005a U+00ab U+003c Control_z Control_z Control_z Control_z Meta_z Meta_Z Meta_z Meta_less Meta_Control_z Meta_Control_z Meta_Control_z Meta_Control_z +U+007a +U+005a U+00ab U+003c Control_z Control_z Control_z Control_z Meta_z Meta_Z Meta_z Meta_less Meta_Control_z Meta_Control_z Meta_Control_z Meta_Control_z +U+007a +U+005a U+00ab U+003c Control_z Control_z Control_z Control_z Meta_z Meta_Z Meta_z Meta_less Meta_Control_z Meta_Control_z Meta_Control_z Meta_Control_z +U+007a +U+005a U+00ab U+003c Control_z Control_z Control_z Control_z Meta_z Meta_Z Meta_z Meta_less Meta_Control_z Meta_Control_z Meta_Control_z Meta_Control_z +U+005a +U+007a U+00ab U+003c Control_z Control_z Control_z Control_z Meta_z Meta_Z Meta_z Meta_less Meta_Control_z Meta_Control_z Meta_Control_z Meta_Control_z +U+005a +U+007a U+00ab U+003c Control_z Control_z Control_z Control_z Meta_z Meta_Z Meta_z Meta_less Meta_Control_z Meta_Control_z Meta_Control_z Meta_Control_z +U+005a +U+007a U+00ab U+003c Control_z Control_z Control_z Control_z Meta_z Meta_Z Meta_z Meta_less Meta_Control_z Meta_Control_z Meta_Control_z Meta_Control_z +U+005a +U+007a U+00ab U+003c Control_z Control_z Control_z Control_z Meta_z Meta_Z Meta_z Meta_less Meta_Control_z Meta_Control_z Meta_Control_z Meta_Control_z +keycode 43 = U+002a +U+00b5 dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve Meta_asterisk Meta_asterisk dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve U+002a +U+00b5 dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve Meta_asterisk Meta_asterisk dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve U+002a +U+00b5 dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve Meta_asterisk Meta_asterisk dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve U+002a +U+00b5 dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve Meta_asterisk Meta_asterisk dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve U+002a +U+039c dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve Meta_asterisk Meta_asterisk dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve U+002a +U+039c dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve Meta_asterisk Meta_asterisk dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve U+002a +U+039c dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve Meta_asterisk Meta_asterisk dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve U+002a +U+039c dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve Meta_asterisk Meta_asterisk dead_grave dead_breve dead_grave dead_breve dead_grave dead_breve +keycode 44 = +U+0077 +U+0057 +U+0142 +U+0141 Control_w Control_w Control_w Control_w Meta_w Meta_W Meta_w Meta_W Meta_Control_w Meta_Control_w Meta_Control_w Meta_Control_w +U+0077 +U+0057 +U+0142 +U+0141 Control_w Control_w Control_w Control_w Meta_w Meta_W Meta_w Meta_W Meta_Control_w Meta_Control_w Meta_Control_w Meta_Control_w +U+0077 +U+0057 +U+0142 +U+0141 Control_w Control_w Control_w Control_w Meta_w Meta_W Meta_w Meta_W Meta_Control_w Meta_Control_w Meta_Control_w Meta_Control_w +U+0077 +U+0057 +U+0142 +U+0141 Control_w Control_w Control_w Control_w Meta_w Meta_W Meta_w Meta_W Meta_Control_w Meta_Control_w Meta_Control_w Meta_Control_w +U+0057 +U+0077 +U+0141 +U+0142 Control_w Control_w Control_w Control_w Meta_w Meta_W Meta_w Meta_W Meta_Control_w Meta_Control_w Meta_Control_w Meta_Control_w +U+0057 +U+0077 +U+0141 +U+0142 Control_w Control_w Control_w Control_w Meta_w Meta_W Meta_w Meta_W Meta_Control_w Meta_Control_w Meta_Control_w Meta_Control_w +U+0057 +U+0077 +U+0141 +U+0142 Control_w Control_w Control_w Control_w Meta_w Meta_W Meta_w Meta_W Meta_Control_w Meta_Control_w Meta_Control_w Meta_Control_w +U+0057 +U+0077 +U+0141 +U+0142 Control_w Control_w Control_w Control_w Meta_w Meta_W Meta_w Meta_W Meta_Control_w Meta_Control_w Meta_Control_w Meta_Control_w keycode 45 = +U+0078 +U+0058 U+00bb U+003e Control_x Control_x Control_x Control_x Meta_x Meta_X Meta_x Meta_greater Meta_Control_x Meta_Control_x Meta_Control_x Meta_Control_x +U+0078 +U+0058 U+00bb U+003e Control_x Control_x Control_x Control_x Meta_x Meta_X Meta_x Meta_greater Meta_Control_x Meta_Control_x Meta_Control_x Meta_Control_x +U+0078 +U+0058 U+00bb U+003e Control_x Control_x Control_x Control_x Meta_x Meta_X Meta_x Meta_greater Meta_Control_x Meta_Control_x Meta_Control_x Meta_Control_x +U+0078 +U+0058 U+00bb U+003e Control_x Control_x Control_x Control_x Meta_x Meta_X Meta_x Meta_greater Meta_Control_x Meta_Control_x Meta_Control_x Meta_Control_x +U+0058 +U+0078 U+00bb U+003e Control_x Control_x Control_x Control_x Meta_x Meta_X Meta_x Meta_greater Meta_Control_x Meta_Control_x Meta_Control_x Meta_Control_x +U+0058 +U+0078 U+00bb U+003e Control_x Control_x Control_x Control_x Meta_x Meta_X Meta_x Meta_greater Meta_Control_x Meta_Control_x Meta_Control_x Meta_Control_x +U+0058 +U+0078 U+00bb U+003e Control_x Control_x Control_x Control_x Meta_x Meta_X Meta_x Meta_greater Meta_Control_x Meta_Control_x Meta_Control_x Meta_Control_x +U+0058 +U+0078 U+00bb U+003e Control_x Control_x Control_x Control_x Meta_x Meta_X Meta_x Meta_greater Meta_Control_x Meta_Control_x Meta_Control_x Meta_Control_x keycode 46 = +U+0063 +U+0043 U+00a2 U+00a9 Control_c Control_c Control_c Control_c Meta_c Meta_C Meta_c Meta_C Meta_Control_c Meta_Control_c Meta_Control_c Meta_Control_c +U+0063 +U+0043 U+00a2 U+00a9 Control_c Control_c Control_c Control_c Meta_c Meta_C Meta_c Meta_C Meta_Control_c Meta_Control_c Meta_Control_c Meta_Control_c +U+0063 +U+0043 U+00a2 U+00a9 Control_c Control_c Control_c Control_c Meta_c Meta_C Meta_c Meta_C Meta_Control_c Meta_Control_c Meta_Control_c Meta_Control_c +U+0063 +U+0043 U+00a2 U+00a9 Control_c Control_c Control_c Control_c Meta_c Meta_C Meta_c Meta_C Meta_Control_c Meta_Control_c Meta_Control_c Meta_Control_c +U+0043 +U+0063 U+00a2 U+00a9 Control_c Control_c Control_c Control_c Meta_c Meta_C Meta_c Meta_C Meta_Control_c Meta_Control_c Meta_Control_c Meta_Control_c +U+0043 +U+0063 U+00a2 U+00a9 Control_c Control_c Control_c Control_c Meta_c Meta_C Meta_c Meta_C Meta_Control_c Meta_Control_c Meta_Control_c Meta_Control_c +U+0043 +U+0063 U+00a2 U+00a9 Control_c Control_c Control_c Control_c Meta_c Meta_C Meta_c Meta_C Meta_Control_c Meta_Control_c Meta_Control_c Meta_Control_c +U+0043 +U+0063 U+00a2 U+00a9 Control_c Control_c Control_c Control_c Meta_c Meta_C Meta_c Meta_C Meta_Control_c Meta_Control_c Meta_Control_c Meta_Control_c keycode 47 = +U+0076 +U+0056 U+201c U+2018 Control_v Control_v Control_v Control_v Meta_v Meta_V Meta_v Meta_V Meta_Control_v Meta_Control_v Meta_Control_v Meta_Control_v +U+0076 +U+0056 U+201c U+2018 Control_v Control_v Control_v Control_v Meta_v Meta_V Meta_v Meta_V Meta_Control_v Meta_Control_v Meta_Control_v Meta_Control_v +U+0076 +U+0056 U+201c U+2018 Control_v Control_v Control_v Control_v Meta_v Meta_V Meta_v Meta_V Meta_Control_v Meta_Control_v Meta_Control_v Meta_Control_v +U+0076 +U+0056 U+201c U+2018 Control_v Control_v Control_v Control_v Meta_v Meta_V Meta_v Meta_V Meta_Control_v Meta_Control_v Meta_Control_v Meta_Control_v +U+0056 +U+0076 U+201c U+2018 Control_v Control_v Control_v Control_v Meta_v Meta_V Meta_v Meta_V Meta_Control_v Meta_Control_v Meta_Control_v Meta_Control_v +U+0056 +U+0076 U+201c U+2018 Control_v Control_v Control_v Control_v Meta_v Meta_V Meta_v Meta_V Meta_Control_v Meta_Control_v Meta_Control_v Meta_Control_v +U+0056 +U+0076 U+201c U+2018 Control_v Control_v Control_v Control_v Meta_v Meta_V Meta_v Meta_V Meta_Control_v Meta_Control_v Meta_Control_v Meta_Control_v +U+0056 +U+0076 U+201c U+2018 Control_v Control_v Control_v Control_v Meta_v Meta_V Meta_v Meta_V Meta_Control_v Meta_Control_v Meta_Control_v Meta_Control_v keycode 48 = +U+0062 +U+0042 U+201d U+2019 Control_b Control_b Control_b Control_b Meta_b Meta_B Meta_b Meta_B Meta_Control_b Meta_Control_b Meta_Control_b Meta_Control_b +U+0062 +U+0042 U+201d U+2019 Control_b Control_b Control_b Control_b Meta_b Meta_B Meta_b Meta_B Meta_Control_b Meta_Control_b Meta_Control_b Meta_Control_b +U+0062 +U+0042 U+201d U+2019 Control_b Control_b Control_b Control_b Meta_b Meta_B Meta_b Meta_B Meta_Control_b Meta_Control_b Meta_Control_b Meta_Control_b +U+0062 +U+0042 U+201d U+2019 Control_b Control_b Control_b Control_b Meta_b Meta_B Meta_b Meta_B Meta_Control_b Meta_Control_b Meta_Control_b Meta_Control_b +U+0042 +U+0062 U+201d U+2019 Control_b Control_b Control_b Control_b Meta_b Meta_B Meta_b Meta_B Meta_Control_b Meta_Control_b Meta_Control_b Meta_Control_b +U+0042 +U+0062 U+201d U+2019 Control_b Control_b Control_b Control_b Meta_b Meta_B Meta_b Meta_B Meta_Control_b Meta_Control_b Meta_Control_b Meta_Control_b +U+0042 +U+0062 U+201d U+2019 Control_b Control_b Control_b Control_b Meta_b Meta_B Meta_b Meta_B Meta_Control_b Meta_Control_b Meta_Control_b Meta_Control_b +U+0042 +U+0062 U+201d U+2019 Control_b Control_b Control_b Control_b Meta_b Meta_B Meta_b Meta_B Meta_Control_b Meta_Control_b Meta_Control_b Meta_Control_b keycode 49 = +U+006e +U+004e +U+006e +U+004e Control_n Control_n Control_n Control_n Meta_n Meta_N Meta_n Meta_N Meta_Control_n Meta_Control_n Meta_Control_n Meta_Control_n +U+006e +U+004e +U+006e +U+004e Control_n Control_n Control_n Control_n Meta_n Meta_N Meta_n Meta_N Meta_Control_n Meta_Control_n Meta_Control_n Meta_Control_n +U+006e +U+004e +U+006e +U+004e Control_n Control_n Control_n Control_n Meta_n Meta_N Meta_n Meta_N Meta_Control_n Meta_Control_n Meta_Control_n Meta_Control_n +U+006e +U+004e +U+006e +U+004e Control_n Control_n Control_n Control_n Meta_n Meta_N Meta_n Meta_N Meta_Control_n Meta_Control_n Meta_Control_n Meta_Control_n +U+004e +U+006e +U+004e +U+006e Control_n Control_n Control_n Control_n Meta_n Meta_N Meta_n Meta_N Meta_Control_n Meta_Control_n Meta_Control_n Meta_Control_n +U+004e +U+006e +U+004e +U+006e Control_n Control_n Control_n Control_n Meta_n Meta_N Meta_n Meta_N Meta_Control_n Meta_Control_n Meta_Control_n Meta_Control_n +U+004e +U+006e +U+004e +U+006e Control_n Control_n Control_n Control_n Meta_n Meta_N Meta_n Meta_N Meta_Control_n Meta_Control_n Meta_Control_n Meta_Control_n +U+004e +U+006e +U+004e +U+006e Control_n Control_n Control_n Control_n Meta_n Meta_N Meta_n Meta_N Meta_Control_n Meta_Control_n Meta_Control_n Meta_Control_n -keycode 50 = +U+006d +U+004d +U+00b5 +U+00ba Control_m Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_M Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m +U+006d +U+004d +U+00b5 +U+00ba Control_m Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_M Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m +U+006d +U+004d +U+00b5 +U+00ba Control_m Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_M Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m +U+006d +U+004d +U+00b5 +U+00ba Control_m Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_M Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m +U+004d +U+006d +U+039c +U+00ba Control_m Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_M Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m +U+004d +U+006d +U+039c +U+00ba Control_m Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_M Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m +U+004d +U+006d +U+039c +U+00ba Control_m Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_M Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m +U+004d +U+006d +U+039c +U+00ba Control_m Control_m Control_m Control_m Meta_m Meta_M Meta_m Meta_M Meta_Control_m Meta_Control_m Meta_Control_m Meta_Control_m -keycode 51 = U+002c U+003c U+2500 U+00d7 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_comma Meta_less Meta_comma Meta_less VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+002c U+003c U+2500 U+00d7 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_comma Meta_less Meta_comma Meta_less VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+002c U+003c U+2500 U+00d7 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_comma Meta_less Meta_comma Meta_less VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+002c U+003c U+2500 U+00d7 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_comma Meta_less Meta_comma Meta_less VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+002c U+003c U+2500 U+00d7 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_comma Meta_less Meta_comma Meta_less VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+002c U+003c U+2500 U+00d7 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_comma Meta_less Meta_comma Meta_less VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+002c U+003c U+2500 U+00d7 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_comma Meta_less Meta_comma Meta_less VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+002c U+003c U+2500 U+00d7 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_comma Meta_less Meta_comma Meta_less VoidSymbol VoidSymbol VoidSymbol VoidSymbol -keycode 52 = U+002e U+003e U+00b7 U+00f7 Compose Compose Compose Compose Meta_period Meta_greater Meta_period Meta_greater Compose Compose Compose Compose U+002e U+003e U+00b7 U+00f7 Compose Compose Compose Compose Meta_period Meta_greater Meta_period Meta_greater Compose Compose Compose Compose U+002e U+003e U+00b7 U+00f7 Compose Compose Compose Compose Meta_period Meta_greater Meta_period Meta_greater Compose Compose Compose Compose U+002e U+003e U+00b7 U+00f7 Compose Compose Compose Compose Meta_period Meta_greater Meta_period Meta_greater Compose Compose Compose Compose U+002e U+003e U+00b7 U+00f7 Compose Compose Compose Compose Meta_period Meta_greater Meta_period Meta_greater Compose Compose Compose Compose U+002e U+003e U+00b7 U+00f7 Compose Compose Compose Compose Meta_period Meta_greater Meta_period Meta_greater Compose Compose Compose Compose U+002e U+003e U+00b7 U+00f7 Compose Compose Compose Compose Meta_period Meta_greater Meta_period Meta_greater Compose Compose Compose Compose U+002e U+003e U+00b7 U+00f7 Compose Compose Compose Compose Meta_period Meta_greater Meta_period Meta_greater Compose Compose Compose Compose -keycode 53 = U+002f U+003f U+0323 U+002e Delete Delete Compose Compose Meta_slash Meta_question Meta_slash Meta_period Meta_Delete Meta_Delete Compose Compose U+002f U+003f U+0323 U+002e Delete Delete Compose Compose Meta_slash Meta_question Meta_slash Meta_period Meta_Delete Meta_Delete Compose Compose U+002f U+003f U+0323 U+002e Delete Delete Compose Compose Meta_slash Meta_question Meta_slash Meta_period Meta_Delete Meta_Delete Compose Compose U+002f U+003f U+0323 U+002e Delete Delete Compose Compose Meta_slash Meta_question Meta_slash Meta_period Meta_Delete Meta_Delete Compose Compose U+002f U+003f U+0323 U+002e Delete Delete Compose Compose Meta_slash Meta_question Meta_slash Meta_period Meta_Delete Meta_Delete Compose Compose U+002f U+003f U+0323 U+002e Delete Delete Compose Compose Meta_slash Meta_question Meta_slash Meta_period Meta_Delete Meta_Delete Compose Compose U+002f U+003f U+0323 U+002e Delete Delete Compose Compose Meta_slash Meta_question Meta_slash Meta_period Meta_Delete Meta_Delete Compose Compose U+002f U+003f U+0323 U+002e Delete Delete Compose Compose Meta_slash Meta_question Meta_slash Meta_period Meta_Delete Meta_Delete Compose Compose +keycode 50 = U+002c U+003f dead_acute dead_doubleacute Delete Delete dead_acute dead_doubleacute Meta_comma Meta_question dead_acute dead_doubleacute Meta_Delete Meta_Delete dead_acute dead_doubleacute U+002c U+003f dead_acute dead_doubleacute Delete Delete dead_acute dead_doubleacute Meta_comma Meta_question dead_acute dead_doubleacute Meta_Delete Meta_Delete dead_acute dead_doubleacute U+002c U+003f dead_acute dead_doubleacute Delete Delete dead_acute dead_doubleacute Meta_comma Meta_question dead_acute dead_doubleacute Meta_Delete Meta_Delete dead_acute dead_doubleacute U+002c U+003f dead_acute dead_doubleacute Delete Delete dead_acute dead_doubleacute Meta_comma Meta_question dead_acute dead_doubleacute Meta_Delete Meta_Delete dead_acute dead_doubleacute U+002c U+003f dead_acute dead_doubleacute Delete Delete dead_acute dead_doubleacute Meta_comma Meta_question dead_acute dead_doubleacute Meta_Delete Meta_Delete dead_acute dead_doubleacute U+002c U+003f dead_acute dead_doubleacute Delete Delete dead_acute dead_doubleacute Meta_comma Meta_question dead_acute dead_doubleacute Meta_Delete Meta_Delete dead_acute dead_doubleacute U+002c U+003f dead_acute dead_doubleacute Delete Delete dead_acute dead_doubleacute Meta_comma Meta_question dead_acute dead_doubleacute Meta_Delete Meta_Delete dead_acute dead_doubleacute U+002c U+003f dead_acute dead_doubleacute Delete Delete dead_acute dead_doubleacute Meta_comma Meta_question dead_acute dead_doubleacute Meta_Delete Meta_Delete dead_acute dead_doubleacute +keycode 51 = U+003b U+002e U+2500 U+00d7 Compose Compose Compose Compose Meta_semicolon Meta_period Meta_semicolon Meta_period Compose Compose Compose Compose U+003b U+002e U+2500 U+00d7 Compose Compose Compose Compose Meta_semicolon Meta_period Meta_semicolon Meta_period Compose Compose Compose Compose U+003b U+002e U+2500 U+00d7 Compose Compose Compose Compose Meta_semicolon Meta_period Meta_semicolon Meta_period Compose Compose Compose Compose U+003b U+002e U+2500 U+00d7 Compose Compose Compose Compose Meta_semicolon Meta_period Meta_semicolon Meta_period Compose Compose Compose Compose U+003b U+002e U+2500 U+00d7 Compose Compose Compose Compose Meta_semicolon Meta_period Meta_semicolon Meta_period Compose Compose Compose Compose U+003b U+002e U+2500 U+00d7 Compose Compose Compose Compose Meta_semicolon Meta_period Meta_semicolon Meta_period Compose Compose Compose Compose U+003b U+002e U+2500 U+00d7 Compose Compose Compose Compose Meta_semicolon Meta_period Meta_semicolon Meta_period Compose Compose Compose Compose U+003b U+002e U+2500 U+00d7 Compose Compose Compose Compose Meta_semicolon Meta_period Meta_semicolon Meta_period Compose Compose Compose Compose +keycode 52 = U+003a U+002f U+00b7 U+00f7 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_colon Meta_slash Meta_colon Meta_slash VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+003a U+002f U+00b7 U+00f7 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_colon Meta_slash Meta_colon Meta_slash VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+003a U+002f U+00b7 U+00f7 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_colon Meta_slash Meta_colon Meta_slash VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+003a U+002f U+00b7 U+00f7 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_colon Meta_slash Meta_colon Meta_slash VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+003a U+002f U+00b7 U+00f7 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_colon Meta_slash Meta_colon Meta_slash VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+003a U+002f U+00b7 U+00f7 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_colon Meta_slash Meta_colon Meta_slash VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+003a U+002f U+00b7 U+00f7 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_colon Meta_slash Meta_colon Meta_slash VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+003a U+002f U+00b7 U+00f7 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_colon Meta_slash Meta_colon Meta_slash VoidSymbol VoidSymbol VoidSymbol VoidSymbol +keycode 53 = U+0021 U+00a7 U+0323 U+002e Compose Compose Compose Compose Meta_exclam Meta_exclam Meta_exclam Meta_period Compose Compose Compose Compose U+0021 U+00a7 U+0323 U+002e Compose Compose Compose Compose Meta_exclam Meta_exclam Meta_exclam Meta_period Compose Compose Compose Compose U+0021 U+00a7 U+0323 U+002e Compose Compose Compose Compose Meta_exclam Meta_exclam Meta_exclam Meta_period Compose Compose Compose Compose U+0021 U+00a7 U+0323 U+002e Compose Compose Compose Compose Meta_exclam Meta_exclam Meta_exclam Meta_period Compose Compose Compose Compose U+0021 U+00a7 U+0323 U+002e Compose Compose Compose Compose Meta_exclam Meta_exclam Meta_exclam Meta_period Compose Compose Compose Compose U+0021 U+00a7 U+0323 U+002e Compose Compose Compose Compose Meta_exclam Meta_exclam Meta_exclam Meta_period Compose Compose Compose Compose U+0021 U+00a7 U+0323 U+002e Compose Compose Compose Compose Meta_exclam Meta_exclam Meta_exclam Meta_period Compose Compose Compose Compose U+0021 U+00a7 U+0323 U+002e Compose Compose Compose Compose Meta_exclam Meta_exclam Meta_exclam Meta_period Compose Compose Compose Compose keycode 54 = Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift keycode 55 = KP_Multiply KP_Multiply Hex_C KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply Hex_C KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply Hex_C KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply Hex_C KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply Hex_C KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply Hex_C KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply Hex_C KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply Hex_C KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply Hex_C KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply Hex_C KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply Hex_C KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply Hex_C KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply Hex_C KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply Hex_C KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply Hex_C KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply Hex_C KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply keycode 56 = Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt @@ -82,7 +82,7 @@ keycode 80 = KP_2 KP_2 Hex_2 KP_2 KP_2 KP_2 KP_2 KP_2 Ascii_2 Hex_2 KP_2 KP_2 KP keycode 81 = KP_3 KP_3 Hex_3 KP_3 KP_3 KP_3 KP_3 KP_3 Ascii_3 Hex_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 Hex_3 KP_3 KP_3 KP_3 KP_3 KP_3 Ascii_3 Hex_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 Hex_3 KP_3 KP_3 KP_3 KP_3 KP_3 Ascii_3 Hex_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 Hex_3 KP_3 KP_3 KP_3 KP_3 KP_3 Ascii_3 Hex_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 Hex_3 KP_3 KP_3 KP_3 KP_3 KP_3 Ascii_3 Hex_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 Hex_3 KP_3 KP_3 KP_3 KP_3 KP_3 Ascii_3 Hex_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 Hex_3 KP_3 KP_3 KP_3 KP_3 KP_3 Ascii_3 Hex_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 Hex_3 KP_3 KP_3 KP_3 KP_3 KP_3 Ascii_3 Hex_3 KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 keycode 82 = KP_0 KP_0 Hex_0 KP_0 KP_0 KP_0 KP_0 KP_0 Ascii_0 Hex_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 Hex_0 KP_0 KP_0 KP_0 KP_0 KP_0 Ascii_0 Hex_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 Hex_0 KP_0 KP_0 KP_0 KP_0 KP_0 Ascii_0 Hex_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 Hex_0 KP_0 KP_0 KP_0 KP_0 KP_0 Ascii_0 Hex_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 Hex_0 KP_0 KP_0 KP_0 KP_0 KP_0 Ascii_0 Hex_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 Hex_0 KP_0 KP_0 KP_0 KP_0 KP_0 Ascii_0 Hex_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 Hex_0 KP_0 KP_0 KP_0 KP_0 KP_0 Ascii_0 Hex_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 Hex_0 KP_0 KP_0 KP_0 KP_0 KP_0 Ascii_0 Hex_0 KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 keycode 83 = KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period Boot KP_Period KP_Period KP_Period KP_Period KP_Period Boot KP_Period Boot KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period Boot KP_Period KP_Period KP_Period KP_Period KP_Period Boot KP_Period Boot KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period Boot KP_Period KP_Period KP_Period KP_Period KP_Period Boot KP_Period Boot KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period Boot KP_Period KP_Period KP_Period KP_Period KP_Period Boot KP_Period Boot KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period Boot KP_Period KP_Period KP_Period KP_Period KP_Period Boot KP_Period Boot KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period Boot KP_Period KP_Period KP_Period KP_Period KP_Period Boot KP_Period Boot KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period Boot KP_Period KP_Period KP_Period KP_Period KP_Period Boot KP_Period Boot KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period Boot KP_Period KP_Period KP_Period KP_Period KP_Period Boot KP_Period Boot KP_Period -keycode 86 = U+005c U+007c U+007c U+00a6 Control_backslash Control_backslash Control_backslash Control_backslash Meta_backslash Meta_bar Meta_bar Meta_bar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash U+005c U+007c U+007c U+00a6 Control_backslash Control_backslash Control_backslash Control_backslash Meta_backslash Meta_bar Meta_bar Meta_bar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash U+005c U+007c U+007c U+00a6 Control_backslash Control_backslash Control_backslash Control_backslash Meta_backslash Meta_bar Meta_bar Meta_bar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash U+005c U+007c U+007c U+00a6 Control_backslash Control_backslash Control_backslash Control_backslash Meta_backslash Meta_bar Meta_bar Meta_bar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash U+005c U+007c U+007c U+00a6 Control_backslash Control_backslash Control_backslash Control_backslash Meta_backslash Meta_bar Meta_bar Meta_bar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash U+005c U+007c U+007c U+00a6 Control_backslash Control_backslash Control_backslash Control_backslash Meta_backslash Meta_bar Meta_bar Meta_bar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash U+005c U+007c U+007c U+00a6 Control_backslash Control_backslash Control_backslash Control_backslash Meta_backslash Meta_bar Meta_bar Meta_bar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash U+005c U+007c U+007c U+00a6 Control_backslash Control_backslash Control_backslash Control_backslash Meta_backslash Meta_bar Meta_bar Meta_bar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash +keycode 86 = U+003c U+003e U+007c U+00a6 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_less Meta_greater Meta_bar Meta_bar VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+003c U+003e U+007c U+00a6 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_less Meta_greater Meta_bar Meta_bar VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+003c U+003e U+007c U+00a6 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_less Meta_greater Meta_bar Meta_bar VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+003c U+003e U+007c U+00a6 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_less Meta_greater Meta_bar Meta_bar VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+003c U+003e U+007c U+00a6 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_less Meta_greater Meta_bar Meta_bar VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+003c U+003e U+007c U+00a6 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_less Meta_greater Meta_bar Meta_bar VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+003c U+003e U+007c U+00a6 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_less Meta_greater Meta_bar Meta_bar VoidSymbol VoidSymbol VoidSymbol VoidSymbol U+003c U+003e U+007c U+00a6 VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_less Meta_greater Meta_bar Meta_bar VoidSymbol VoidSymbol VoidSymbol VoidSymbol keycode 87 = F11 F23 Console_23 Console_35 F35 F47 Console_23 Console_35 Console_11 Console_23 F11 F11 Console_11 Console_23 F11 F11 F11 F23 Console_23 Console_35 F35 F47 Console_23 Console_35 Console_11 Console_23 F11 F11 Console_11 Console_23 F11 F11 F11 F23 Console_23 Console_35 F35 F47 Console_23 Console_35 Console_11 Console_23 F11 F11 Console_11 Console_23 F11 F11 F11 F23 Console_23 Console_35 F35 F47 Console_23 Console_35 Console_11 Console_23 F11 F11 Console_11 Console_23 F11 F11 F11 F23 Console_23 Console_35 F35 F47 Console_23 Console_35 Console_11 Console_23 F11 F11 Console_11 Console_23 F11 F11 F11 F23 Console_23 Console_35 F35 F47 Console_23 Console_35 Console_11 Console_23 F11 F11 Console_11 Console_23 F11 F11 F11 F23 Console_23 Console_35 F35 F47 Console_23 Console_35 Console_11 Console_23 F11 F11 Console_11 Console_23 F11 F11 F11 F23 Console_23 Console_35 F35 F47 Console_23 Console_35 Console_11 Console_23 F11 F11 Console_11 Console_23 F11 F11 keycode 88 = F12 F24 Console_24 Console_36 F36 F48 Console_24 Console_36 Console_12 Console_24 F12 F12 Console_12 Console_24 F12 F12 F12 F24 Console_24 Console_36 F36 F48 Console_24 Console_36 Console_12 Console_24 F12 F12 Console_12 Console_24 F12 F12 F12 F24 Console_24 Console_36 F36 F48 Console_24 Console_36 Console_12 Console_24 F12 F12 Console_12 Console_24 F12 F12 F12 F24 Console_24 Console_36 F36 F48 Console_24 Console_36 Console_12 Console_24 F12 F12 Console_12 Console_24 F12 F12 F12 F24 Console_24 Console_36 F36 F48 Console_24 Console_36 Console_12 Console_24 F12 F12 Console_12 Console_24 F12 F12 F12 F24 Console_24 Console_36 F36 F48 Console_24 Console_36 Console_12 Console_24 F12 F12 Console_12 Console_24 F12 F12 F12 F24 Console_24 Console_36 F36 F48 Console_24 Console_36 Console_12 Console_24 F12 F12 Console_12 Console_24 F12 F12 F12 F24 Console_24 Console_36 F36 F48 Console_24 Console_36 Console_12 Console_24 F12 F12 Console_12 Console_24 F12 F12 keycode 102 = Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home Home @@ -100,7 +100,7 @@ keycode 97 = Control Control Control Control Control Control Control Control Con keycode 119 = Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause Pause keycode 99 = VoidSymbol VoidSymbol Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash VoidSymbol VoidSymbol Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash VoidSymbol VoidSymbol Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash VoidSymbol VoidSymbol Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash VoidSymbol VoidSymbol Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash VoidSymbol VoidSymbol Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash VoidSymbol VoidSymbol Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash VoidSymbol VoidSymbol Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash Control_backslash keycode 98 = KP_Divide KP_Divide Hex_B KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide Hex_B KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide Hex_B KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide Hex_B KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide Hex_B KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide Hex_B KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide Hex_B KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide Hex_B KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide Hex_B KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide Hex_B KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide Hex_B KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide Hex_B KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide Hex_B KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide Hex_B KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide Hex_B KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide Hex_B KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide -keycode 100 = AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose AltGr Compose +keycode 100 = AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr keycode 125 = Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt keycode 126 = Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt keycode 121 = KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period diff --git a/resources/grub/keymap/ukdvorak b/resources/grub/keymap/original/ukdvorak index d41b873..d41b873 100644 --- a/resources/grub/keymap/ukdvorak +++ b/resources/grub/keymap/original/ukdvorak diff --git a/resources/grub/keymap/ukqwerty b/resources/grub/keymap/original/ukqwerty index 94e5a45..94e5a45 100644 --- a/resources/grub/keymap/ukqwerty +++ b/resources/grub/keymap/original/ukqwerty diff --git a/resources/grub/keymap/usdvorak b/resources/grub/keymap/original/usdvorak index b99b6a0..b99b6a0 100644 --- a/resources/grub/keymap/usdvorak +++ b/resources/grub/keymap/original/usdvorak diff --git a/resources/grub/keymap/usqwerty b/resources/grub/keymap/original/usqwerty index 5110323..5110323 100644 --- a/resources/grub/keymap/usqwerty +++ b/resources/grub/keymap/original/usqwerty diff --git a/resources/grub/keymap/dvorak.gkb b/resources/grub/keymap/usdvorak.gkb Binary files differindex 41301ef..41301ef 100644 --- a/resources/grub/keymap/dvorak.gkb +++ b/resources/grub/keymap/usdvorak.gkb diff --git a/resources/libreboot/config/macbook21config b/resources/libreboot/config/macbook21/config index 63af035..63af035 100644 --- a/resources/libreboot/config/macbook21config +++ b/resources/libreboot/config/macbook21/config diff --git a/resources/libreboot/config/t60config b/resources/libreboot/config/t60/config index d5754ff..d5754ff 100644 --- a/resources/libreboot/config/t60config +++ b/resources/libreboot/config/t60/config diff --git a/resources/libreboot/config/x60config b/resources/libreboot/config/x60/config index fe56ceb..fe56ceb 100644 --- a/resources/libreboot/config/x60config +++ b/resources/libreboot/config/x60/config diff --git a/resources/libreboot/config/x60tconfig b/resources/libreboot/config/x60t/config index f698057..f698057 100644 --- a/resources/libreboot/config/x60tconfig +++ b/resources/libreboot/config/x60t/config |