⬆️ ⬇️

Nokia N900. We continue to understand or "Hack your Nokia N900"

Good afternoon, dear reader. I continue my series of articles on the Nokia N900. Here , here and here - my previous publications.

Today we will continue to study the apparatus, and today's topic is a hack. We will climb into different things and change different things that are not provided for change by developers. This is done very easily and is subject even to the average user, if he has the desire. I will not tell you how to patch the kernel or take the device into a high-performance mode, I’ll just show some useful improvements that might be useful to everyone.

Disclaimer: The author is not responsible for any damage to your machine as you follow these instructions. You do everything at your own peril and risk.

Hope not scared? I can say that to kill the device to such a state that you cannot restore it is practically unreal (but it is possible !!! I know one case). But even if you succeed, then 99% of the service center will help you. But the main rule - be careful and read first, and then do it, and do it carefully and pay close attention to the sequence of actions, and most importantly, what is highlighted in red (not for nothing that I highlighted it).

image







We disassemble and assemble the N900.



The main page displays the process of disassembled N900. There is an official service manual. But on public access it is not available. Distributed to service centers, as far as I know. But there are instances on the network and you can find them if you wish: keywords Nokia, Service Manual RX-51. I do not have the right to post it - it contradicts the copyright:

Reproduction, transfer, distribution, or

is no.



Translated roughly as follows: copying, transfer, distribution and storage of parts or the entire contents of this document in any form without the prior consent of Nokia is PROHIBITED.

I took the picture not from this document, but from here , a rather popular and widespread resource, and I personally received permission to republish it (they claim that they have the rights to publish this image and have the right to allow republishing). But at the first appeal with an indication of the illegality of the dissemination of this information from representatives of Nokia, I will remove this picture.

Well, in this document everything is described with pictures and is not particularly different from the disassembly of other devices.

I apologize for the fact that I can not lay out the document, but I can’t make my own instructions, I’m really sorry to disassemble my device for this :-).

')

Flashing N900.



In previous publications I have described many interesting applications and many of them are in the extra-testing and even extra-devel repositories. This means that these applications not only do not guarantee that they will work stably, they still do not guarantee that they will not break your phone :-) Plus, some of the instructions from this publication can make your N900 a brick. Therefore, I first decided to show how to restore the device in this case.

As an additional material in Russian, you can see the translation of the Maemo.org Wiki on Fruct .

Nokia in this regard, well done and you can reflash the N900 on any OS (I mean the big three Linux / MacOS / Windows, and not really all of the OS :-)).

What do we need:

1. Tool for flashing - flasher.

swing here .

Here such files interest us there (versions may differ, as the following versions may appear, but the names should remain the same or similar):

maemo_flasher-3.5_2.5.2.2.exe is a version for Windows 7, XP, Vista.

maemo_flasher-3.5_2.5.2.2.tar.gz - Linux version.

maemo_flasher-3.5_2.5.2.2_i386.deb is a version for Debian Linux families.

maemo_flasher-3.5_2.5.2.2_i386.dmg is a version for Intel Mac OS.

maemo_flasher-3.5_2.5.2.2_ppc.dmg - version for PPC Mac OS.

2. Download the image of the root system from here and, if necessary, the image of the eMMC (this is the memory that is 32 GB).

<a href=greenhrefcountable tablets-dev.nokia.com/nokia_N900.php "> Download this link.

There you need to enter IMEI.

image

It is located under the battery or in the "Options" -> "About the product." There in the pop-up window is the last line.

image

You can also unzip it by typing * # 06 # on the phone keypad.

Then we accept the license agreement by clicking the "I accept" button.

We are interested in this file: RX-51_2009SE_3.2010.02-8_PR_COMBINED_MR0_ARM.bin or later, if it is (choose the “Europe” region, since Africa and the States are not suitable, except if you bought the phone from you there).

And this RX-51_2009SE_1.2009.41-1.VANILLA_PR_EMMC_MR0_ARM.bin, if you decide to reflash eMMC.

Still, on the device being sold, pre-base maps of the region in which it is sold, and there are no maps in this image, but this is not terrible, you can use the Map Loader to eliminate this trouble. Why it may be necessary, I will tell below, but if you do not know whether you need it, then it does not.



Notes on installing flasher on Linux.


If you have 64-bit Debian Linux and you install from the deb file, then you need to execute the following command in the directory where you saved the package

sudo dpkg -i --force-architecture ./maemo_flasher-3.5_2.5.2.2_i386.deb





Installation Notes for flasher on Mac OS.


There is no need to do anything, the only thing you need to know is that the flasher can be found in / usr / bin.



Installation Notes for flasher on Windows.


The default package is set in% Program Files% / maemo /.

In Windows 7, you must disable driver signature verification. Make it easy.

Go to the "Start" menu and select the cmd program. On it, right-click and "Run as Administrator".

image

In the interpreter window, enter the following commands:

bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS

bcdedit.exe -set TESTSIGNING ON



As a result, something like this should appear:

image



A little about the firmware eMMC. This is a flash image, in the directory tree it is located in / home / user / MyDocs. Re-flashing may be needed only if you want to get a pristine clean machine or you have a developer version of the phone. If you just need to reflash a brick, then you do not need to flash eMMC !!!



Everything is done from the console and works exactly the same on all the above OS. The only problem may occur with Windows 7. But I will write about it a little lower.

Warning: Charge the phone completely, it will be very bad if the battery sits down during firmware. During the firmware, the device does not charge via USB !!!

So, we all downloaded, installed the flasher utility. We start the console (under Windows - the command interpreter cmd, but I will still call it a console :-)).

And in the console we write these words:

Windows:

cd "% ProgramFiles% \ maemo \ flasher-3.5"

flasher-3.5.exe -F RX-51_2009SE_3.2010.02-8_PR_COMBINED_MR0_ARM.bin -f -R



Linux:

sudo flasher-3.5 -F RX-51_2009SE_3.2010.02-8_PR_COMBINED_MR0_ARM.bin -f -R



MacOS:

sudo /usr/bin/flasher-3.5 -F RX-51_2009SE_3.2010.02-8_PR_COMBINED_MR0_ARM.bin -f -R





As a result, we get the following inscription:



Suitable USB device not found, waiting





0. If you are going to reflash eMMC, then in advance unplug the back cover and pry off the battery with something (just do not overdo it so that it does not fall out during the flashing).

1.If the device is connected via USB, then disconnect it.

2. Turn it off (when turned off with the USB connected, the device does not turn off completely, so follow step number 1).

3. Clamp the “u” button on the keyboard and connect the USB cable.

4. The Nokia logo should appear (sometimes on a very faded background, with very weak backlighting, less often on a bright white background) and in the upper right corner of the top USB icon.



If you did everything correctly, then the inscriptions will go to run, reporting on the different stages of the firmware.

The device will go into reboot. On this flashing is over. Just everything, is not it?



If you are going to flash eMMC, then at this point you need to pull out the battery, preventing the OS from loading.

It is possible to flash eMMC only after the firmware rootfs and in no case should it be overloaded between the ROOTFS firmware and the EMMC firmware !!!! .



Now for those who want to flash eMMC.

and execute the same commands as above, just sew a different image:

Windows:

cd "% ProgramFiles% \ maemo \ flasher-3.5"

flasher-3.5.exe -F RX-51_2009SE_1.2009.41-1.VANILLA_PR_EMMC_MR0_ARM.bin -f -R



Linux:

sudo flasher-3.5 -F RX-51_2009SE_1.2009.41-1.VANILLA_PR_EMMC_MR0_ARM.bin -f -R



MacOS:

sudo /usr/bin/flasher-3.5 -F RX-51_2009SE_1.2009.41-1.VANILLA_PR_EMMC_MR0_ARM.bin -f -R





An inscription about the missing device will appear again:

flasher v2.5.2 (Oct. 21 2009)



Image 'mmc', size 241163 kB

Version RX-51_2009SE_1.2009.41-1.VANILLA

Suitable USB device not found, waiting.





Insert the USB cable into the device and wait until the process goes.

We put the battery back in and simply plug in the USB without the “u” button.

It will look like this:

USB device found found at bus 001, device address 006.

Found device RX-51, hardware revision 2101

NOLO version 1.4.13

Version of 'sw-release': RX-51_2009SE_1.2009.42-11.002_PR_002

Booting device into flash mode.

Suitable USB device not found, waiting.

USB device found found at bus 001, device address 007.

Raw data transfer EP found at EP2.

[writing 74% 179200/241163 kB 13180 kB / s]

Image (s) flashed successfully in 26.848 s (8982 kB / s)!



My process took a little less than a minute. After that, the device will go into reboot. All is ready.



Problems and solutions.


If you have a message on * nix'a "Permission denied" (if you took the flasher from tar.gz), then do so

chmod + x ./flasher-3.5





If you get the message "Error claiming USB interface: Device or resource busy" in * nix, then execute the command

sudo modprobe -r cdc_phonet





Flasher cannot find the device, then do the following:





In general, with the firmware figured out, the process is light and non-hemorrhoid (at least I have not encountered difficulties under MacOS 10.6, Linux Ubuntu 9.10 and Windows XP).



Tuni keyboard layout.



Why this may be needed?

1. If you do not like the current layout (for example, you write to Python on the device and you are annoyed by the absence of "=" on the keyboard, you have to call a table of additional characters each time) or you want to add a couple of characters.

2. If you have a “gray” phone and “blue” characters do not coincide with the characters in the Russian layout, plus there are 4 arrows in the bourgeois versions, and in the Russian 2. This causes confusion. I bought a gray machine for the very reason that the English letters are more engraved Russian and it is very, very convenient. But I ran into the problem of inconsistency of additional characters. Starting from the semicolon and ending with a dollar sign and brackets.

Here is the Russian keyboard:

image

And here is the engraved bourgeois:

image

As you can see does not match.



Well, the decision turned out to be a penny.

All you need is to change the layout. The N900 uses the standard X-extension xkb. File with customization layouts can be found: / usr / share / X11 / xkb / symbols / nokia_vndr / rx-51

Details about the file format and xkb settings can be found here , here and here .



There are a lot of letters there, so I’ll describe here in not very detailed way, but it’s enough that you can change it to your liking.

So, if you open this file, it is big to reprint it. I'll tell you about the main parts.

The basis of any layout is English - basic, this section looks like this:

partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  1. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  2. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  3. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  4. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  5. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  6. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  7. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  8. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  9. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  10. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  11. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  12. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  13. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  14. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  15. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  16. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  17. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  18. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  19. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  20. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  21. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  22. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  23. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  24. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  25. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  26. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  27. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  28. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  29. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  30. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  31. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  32. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  33. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  34. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
  35. partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .
partial hidden alphanumeric_keys xkb_symbols "english_base" { // 1. row key <AD01> { [ q, Q, 1, 1 ] }; key <AD02> { [ w, W, 2, 2 ] }; key <AD03> { [ e, E, 3, 3 ] }; key <AD04> { [ r, R, 4, 4 ] }; key <AD05> { [ t, T, 5, 5 ] }; key <AD06> { [ y, Y, 6, 6 ] }; key <AD07> { [ u, U, 7, 7 ] }; key <AD08> { [ i, I, 8, 8 ] }; key <AD09> { [ o, O, 9, 9 ] }; key <AD10> { [ p, P, 0, 0 ] }; key <AB08> { [ comma, semicolon, equal, equal ] }; // 2. row key <AC01> { [ a, A, asterisk, asterisk ] }; key <AC02> { [ s, S, plus, plus ] }; key <AC03> { [ d, D, numbersign, numbersign ] }; key <AC04> { [ f, F, minus, minus ] }; key <AC05> { [ g, G, underscore, underscore ] }; key <AC06> { [ h, H, parenleft, parenleft ] }; key <AC07> { [ j, J, parenright, parenright ] }; key <AC08> { [ k, K, ampersand, ampersand ] }; key <AC09> { [ l, L, exclam, exclam ] }; key <AB09> { [ period, colon, question, question ] }; // 3. row key <AB01> { [ z, Z, sterling, sterling ] }; key <AB02> { [ x, X, dollar, dollar ] }; key <AB03> { [ c, C, EuroSign, EuroSign ] }; key <AB04> { [ v, V, slash, slash ] }; key <AB05> { [ b, B, backslash, backslash ] }; key <AB06> { [ n, N, quotedbl, quotedbl ] }; key <AB07> { [ m, M, apostrophe, apostrophe ] }; key <SPCE> { [ space, space, at, at ] }; }; * This source code was highlighted with Source Code Highlighter .




It uses 4 levels. Each entry is a symbol, the comments are divided into rows on the keyboard. In this layout, 4 levels are used (4 different values ​​can be obtained with one button). So, how do these levels switch:

Shift (up arrow on the keyboard) - increases by one level in any case. You need to either hold or press once and any next key will increase the value when you press the level, or press twice - you will get the Caps Lock mode, that is, all subsequent button presses will be increased by one level.

Fn (blue arrow on the keyboard) - increases by two levels. In combination with Shift increases three levels up.



So we get to get the desired character from the symbol table, according to the table, for example, take the first button:

  1. key <AD01> {[q, Q, 1, 1]};
* This source code was highlighted with Source Code Highlighter .






“But how about switching layouts?” You ask. And everything is simple. Let's look at the section with the Russian layout:

  1. partial alphanumeric_keys
  2. xkb_symbols "ru" {
  3. include "nokia_vndr / rx-51 (english_base)"
  4. include "nokia_vndr / rx-51 (arrows_2btns)"
  5. name [Group1] = "Russian" ;
  6. key.type [Group1] = "EIGHT_LEVEL_SEMIALPHABETIC" ;
  7. // 1. row
  8. key <AD01> {[q, Q, 1, 1, Cyrillic_shorti, Cyrillic_SHORTI, 1, 1]};
  9. key <AD02> {[w, W, 2, 2, Cyrillic_tse, Cyrillic_TSE, 2, 2]};
  10. key <AD03> {[e, E, 3, 3, Cyrillic_u, Cyrillic_U, 3, 3]};
  11. key <AD04> {[r, R, 4, 4, Cyrillic_ka, Cyrillic_KA, 4, 4]};
  12. key <AD05> {[t, T, 5, 5, Cyrillic_ie, Cyrillic_IE, 5, 5]};
  13. key <AD06> {[y, Y, 6, 6, Cyrillic_en, Cyrillic_EN, 6, 6]};
  14. key <AD07> {[u, U, 7, 7, Cyrillic_ghe, Cyrillic_GHE, 7, 7]};
  15. key <AD08> {[i, I, 8, 8, Cyrillic_sha, Cyrillic_SHA, 8, 8]};
  16. key <AD09> {[o, O, 9, 9, Cyrillic_shcha, Cyrillic_SHCHA, 9, 9]};
  17. key <AD10> {[p, P, 0, 0, Cyrillic_ze, Cyrillic_ZE, 0, 0]};
  18. key <AB08> {[Cyrillic_ha, Cyrillic_HA, Cyrillic_hardsign, Cyrillic_HARDSIGN, Cyrillic_ha, Cyrillic_HA, Cyrillic_hardsign, Cyrillic_HARDSIGN]};
  19. // 2. row
  20. key <AC01> {[a, A, asterisk, asterisk, Cyrillic_ef, Cyrillic_EF, asterisk, asterisk]};
  21. key <AC02> {[s, S, plus, plus, Cyrillic_yeru, Cyrillic_YERU, plus, plus]};
  22. key <AC03> {[d, D, numbersign, numbersign, Cyrillic_ve, Cyrillic_VE, numbersign, numbersign]};
  23. key <AC04> {[f, F, minus, minus, Cyrillic_a, Cyrillic_A, minus, minus]};
  24. key <AC05> {[g, G, underscore, underscore, Cyrillic_pe, Cyrillic_PE, underscore, underscore]};
  25. key <AC06> {[h, H, exclam, exclam, Cyrillic_er, Cyrillic_ER, exclam, exclam]};
  26. key <AC07> {[j, J, question, question, Cyrillic_o, Cyrillic_O, question, question]};
  27. key <AC08> {[k, K, semicolon, semicolon, Cyrillic_el, Cyrillic_EL, semicolon, semicolon]};
  28. key <AC09> {[l, L, colon, colon, Cyrillic_de, Cyrillic_DE, colon, colon]};
  29. key <AB09> {[comma, comma, comma, comma, cyrillic_zhe, cyrillic_zhe, comma, comma]};
  30. key <UP> {[period, period, period, period, Cyrillic_e, Cyrillic_E, period, period]};
  31. // 3. row
  32. key <AB01> {[z, Z, dollar, dollar, Cyrillic_ya, Cyrillic_YA, dollar, dollar]};
  33. key <AB02> {[x, X, EuroSign, EuroSign, Cyrillic_che, Cyrillic_CHE, EuroSign, EuroSign]};
  34. key <AB03> {[c, C, slash, slash, Cyrillic_es, Cyrillic_ES, slash, slash]};
  35. key <AB04> {[v, V, parenleft, parenleft, Cyrillic_em, Cyrillic_EM, parenleft, parenleft]};
  36. key <AB05> {[b, B, parenright, parenright, Cyrillic_i, Cyrillic_I, parenright, parenright]};
  37. key <AB06> {[n, N, quotedbl, quotedbl, Cyrillic_te, Cyrillic_TE, quotedbl, quotedbl]};
  38. key <AB07> {[m, M, apostrophe, apostrophe, Cyrillic_softsign, Cyrillic_SOFTSIGN, apostrophe, apostrophe]};
  39. key <LEFT> {[Cyrillic_be, Cyrillic_BE, Cyrillic_yu, Cyrillic_YU, Cyrillic_be, Cyrillic_BE, Cyrillic_yu, Cyrillic_YU]};
  40. };
* This source code was highlighted with Source Code Highlighter .


The first thing that catches your eye is the number of levels. In this case, there are 8, not 4. Everything is logical. At the level of 1-4 is the English layout, and at levels 5-8 - Russian. This record also says this:

  1. key.type [Group1] = "EIGHT_LEVEL_SEMIALPHABETIC" ;
* This source code was highlighted with Source Code Highlighter .


To increase or decrease the level, use the Ctrl + Spacebar combination. For users, it is known as switching layouts, which is a level increase by 4. When you switch the layout to Russian (thus increasing all further presses by 4), then the Shift and Fn keys work on the same principle:



But there is one limitation, so that you do not write in levels 7 and 8, the values ​​will still be taken from levels 3.4. But it is better to write down the same values ​​as for 3 and 4 in levels 7 and 8, in order to avoid possible problems.

The second thing to look out for is this post:

  1. include "nokia_vndr / rx-51 (arrows_2btns)"
* This source code was highlighted with Source Code Highlighter .


It connects a 2-button cursor (which I don’t like and plus I have 4 cursor buttons on the keys).

Let's look at the section with buttons:

  1. partial hidden alphanumeric_keys
  2. xkb_symbols "arrows_2btns" {
  3. // rx-51 specific arrows mapping
  4. // normal 2nd level must be keyed
  5. key <DOWN> {type [Group1] = "PC_FN_LEVEL2" , symbols [Group1] = [Left, Up]};
  6. key <RGHT> {type [Group1] = "PC_FN_LEVEL2" , symbols [Group1] = [Right, Down]};
  7. };
  8. partial hidden alphanumeric_keys
  9. xkb_symbols "arrows_4btns" {
  10. // standard arrows mapping
  11. // normal 2nd level must be keyed
  12. key <UP> {type [Group1] = "ONE_LEVEL" , symbols [Group1] = [Up]};
  13. key <LEFT> {type [Group1] = "ONE_LEVEL" , symbols [Group1] = [Left]};
  14. key <DOWN> {type [Group1] = "ONE_LEVEL" , symbols [Group1] = [Down]};
  15. key <RGHT> {type [Group1] = "ONE_LEVEL" , symbols [Group1] = [Right]};
  16. };
* This source code was highlighted with Source Code Highlighter .


The first section “arrows_2btns” is used in the Russian layout and in a number of others, where on the keyboard only two keys are reserved for the cursor. The type property [Group1] = "PC_FN_LEVEL2" - just determines that the key has two functions. In the second section of “arrows_4btns”, 4 keys are assigned to the cursor and there are only one function on each key (which is wasteful :-)), this is indicated by the type attribute [Group1] = “ONE_LEVEL”.

Here you can accelerate to the full, you can hang on the cursor 6 values ​​with a double layout, which I did, here is my version:

  1. partial hidden alphanumeric_keys
  2. xkb_symbols "arrows_rule" {
  3. // standard arrows mapping
  4. // normal 2nd level must be keyed
  5. key <UP> {type [Group1] = "EIGHT_LEVEL_SEMIALPHABETIC" , symbols [Group1] = [Up, Up, Cyrillic_e, Cyrillic_E, Up, Up, Cyrillic_e, Cyrillic_E]};
  6. key <LEFT> {type [Group1] = "EIGHT_LEVEL_SEMIALPHABETIC" , symbols [Group1] = [Left, Left, Cyrillic_be, Cyrillic_BE, Left, Left, Cyrillic_be, Cyrillic_BE]};
  7. key <DOWN> {type [Group1] = "EIGHT_LEVEL_SEMIALPHABETIC" , symbols [Group1] = [Down, Down, Cyrillic_yu, Cyrillic_YU, Down, Down, Cyrillic_yu, Cyrillic_YU]};
  8. key <RGHT> {type [Group1] = "EIGHT_LEVEL_SEMIALPHABETIC" , symbols [Group1] = [Right, Right, Cyrillic_hardsign, Cyrillic_HARDSIGN, Right, Right, Cyrillic_hardsign, Cyrillic_HARDSIGN]};
  9. };
* This source code was highlighted with Source Code Highlighter .


In my version in the Russian and English keyboard layout the cursor remains. Fn allows you to type Russian letters that I did not fit into the usual buttons - E, B, Yu, b . The combination of Fn with Shift type upper and lower case characters. Due to the above limitations of 3.4 and 7.8 levels, Russian letters will be printed for any layout, but the loss is not great. Now the cursor buttons carry 3 functional loads (arrow and large and small letters). If we take into account that there are combinations with Ctrl + arrow gives Home, End, PgUp, and PgDwn with the corresponding arrow, we get 4 functions instead of 2, as in the original.



In addition to everything, I changed the “ru” section itself, now I have blue buttons (Fn - combinations) on the “gray” keyboard that are written on the keyboard. Several buttons proved controversial.

,; = CHb - a lot of functions, everything does not fit. I removed the hard mark and moved it to the right arrow. Another disadvantage, comma, only in the English layout, I think to transfer it instead of the pound sign in the Russian layout.

.:? Well - well, everything got in there, only the dot is again present only in the English layout, you can move it instead of a dollar sign or euro.

<cursor left> BYu - I want the cursor to always remain a cursor and the letters can be used both uppercase and lowercase. With such requirements, it's not all on one key. Therefore, I moved the down key to the <cursor>

My version can be said on my site from this link . There lies the rx-51 file.

The file is located in / usr / share / X11 / xkb / symbols / nokia_vndr .

Copy the new version of the file (my or your own) to any place on the device and from xterm you need to execute the following commands:

sudo gainroot

cp / usr / share / X11 / xkb / symbols / nokia_vndr / rx-51 /usr/share/X11/xkb/symbols/nokia_vndr/rx-5.bak

cp / home / user / MyDocs / rx-51 / usr / share / X11 / xkb / symbols / nokia_vndr / rx-51

setxkbmap en



Be extremely careful, if you put a bad rx-51 file and reboot the device, it will not be able to boot and you will have to reflash the device.



In general, a great easy way to change the layout at your discretion. For example, those who work frequently in the console, it would be useful to add the "pipe" "|". Well, and so on.



To close the topic with the buttons, I note that you can also change the table of additional characters that appears when you press Fn + Ctrl. But here everything is not so simple. The difficulty is that these characters are stored in binary form. And in order to create your own table, you need to build a special compiler of this format, write your own configuration, compile it.

For those interested, here is a link to the Maemo Wiki .



Free up space on RootFS



This problem was a surprise for me. Rootfs is the root file system where the kernel and the most necessary (kernel modules, system configuration files) are located to start the system. Rootf is located naturally in a soldered NAND Flash, and not on eMMC. To be clear, a small excursion on the types of memory.

NOR-flash is a type of flash memory that allows you to get a byte from an arbitrary place (random-access for reading), and a big plus is the execution of programs directly from the NOR address space - execute in place (XIP). The disadvantage is the price. Usually used to store settings and various small items. Non-volatile memory. In short, something like non-volatile RAM. Well, lately NOR has been lagging far behind NAND in terms of information.

NAND is much cheaper than NOR. Writing speed in NAND is much faster than in NOR. But the main disadvantage is that the NAND block device and it can only be read from it in blocks (depending on the chip, it can be 512/2048/4096 bytes). SD / MMC cards are just the representatives of NAND.



And for clarity, another term - SoC - System on Chip. It is translated as "system in one chip" or "system on crystal".

So as not to be sprayed, here is the definition and characteristics of the term .



Thus, in the “bare” N900 we have such here are the types of memory:





First, I note that the root and bootloader with the kernel are located at 256Mb NAND. Below I will describe in more detail.

32GB eMMC is divided into 3 sections:



image



Well, now for more details about rootfs. All 256Mb NAND formatted as UBIFS. UBIFS is a replacement for the popular JFFS2. The difference is that UBIFS is able to cache and on large volumes it turns out a good performance boost. The disadvantage is that UBIFS is more complicated (it runs on top of UBI, which runs on top of MTD), and JFFS2 works directly with NAND. Well, still UBIFS appeared only in 2007 and has been working with the kernel since version 2.6.27. That is why JFFS2 is used in almost all embedded devices. But Nokia engineers made a bold decision to use UBIFS. You can read more about this file system here and here .

In NAND there is a boot loader, a kernel and root directory - "/" plus various system files, which are required for booting. On the "bare" device should be about 100MB free. The problem is that if you connect a lot of repositories, the apt cache will swell up a lot. Plus, some libraries are also installed in rootfs and in a week my rootfs overflowed. This is very sad and additional steps have to be taken to prevent this. When rootfs overflows, the system begins to slow down and it is impossible to update the application directories (there is nowhere to save the cache).



Ideally, everything that can be better transferred to the VFAT, but this is dangerous, since it is unmounted when connected to the computer. You can drag and drop everything into / home, as is done for / opt. This is what my method is based on.



The state of fullness can be checked by executing the command in the terminal:

df -h





The easiest way to transfer everything is to create a script with this content:

#!/bin/sh

# Nokia N900 Maemo 5 Script to free up space on rootfs

# ignoring errors when creating dirs that may already exist



# Moving ?? icons to /home/opt

mkdir -p /home/opt/usr/share/icons 2> /dev/ null

cp -r /usr/share/icons/* /home/opt/usr/share/icons

rm -r /usr/share/icons

ln -s /home/opt/usr/share/icons /usr/share/icons



# Moving video on start-up to /home/opt

mkdir -p /home/opt/usr/share/hildon-welcome 2> /dev/ null

cp -r /usr/share/hildon-welcome/* /home/opt/usr/share/hildon-welcome

rm -r /usr/share/hildon-welcome

ln -s /home/opt/usr/share/hildon-welcome /usr/share/hildon-welcome



# ??

mkdir -p /home/opt/usr/share/pixmaps 2> /dev/ null

cp -r /usr/share/pixmaps/* /home/opt/usr/share/pixmaps

rm -r /usr/share/pixmaps

ln -s /home/opt/usr/share/pixmaps /usr/share/pixmaps



# Moving 'apt cache' to /home/opt - Valid until Bug 5746 is fixed .

mkdir -p /home/opt/ var /cache/apt 2> /dev/ null

cp -r / var /cache/apt/* /home/opt/ var /cache/apt

rm -r / var /cache/apt

ln -s /home/opt/ var /cache/apt / var /cache/apt



# Moving locales Source

mv /usr/share/locale /opt

ln -s /opt/locale /usr/share/locale




* This source code was highlighted with Source Code Highlighter .




for example, you created a file called free_my_rootfs.sh

run in console:

chmod + x free_my_rootfs.sh

./free_my_rootfs.sh





This script transfers the icons, the video “handshake” that starts when you turn on, the apt cache and system locale.



Additionally, you can also drag the python “optify python” (if translated, then “drag python to / opt”):

sudo gainroot

apt-get install pymaemo-optify

apt-get clean





The Maps application is also stored in rootfs (the cards themselves are cached on the largest partition), you can do this:

sudo gainroot

mv / usr / share / nokia-maps / home / opt /

ln -s / home / opt / nokia-maps / usr / share / nokia-maps





You can still move the MicroB engine:

sudo gainroot

mv / usr / share / microb-engine / home / opt

ln -s / home / opt / microb-engine / usr / share / microb-engine





Well, you can move the tutorial on using the N900:

sudo gainroot

mv / usr / share / tutorial-applet / home / opt

ln -s / home / opt / tutorial-applet / usr / share / tutorial-applet





Themes also live in rootfs, but transferring them is not very safe, you can get a "brick" and you will have to reflash the device. Just make it a rule to keep a couple of those and delete those that will not be used in the near future.



Well, like this all should help you. There is another method, very brutal, but for real geeks. It lies in the fact that you need to create another partition (reducing the 27 GB VFAT partition) and shove everything there. A detailed description of this method can be found here . There still is a smart script that checks whether the data has already been moved and at the end will show how much space it saved on rootfs. But I do not recommend using this method to beginners.



Well, and most importantly, in the next firmware

Source: https://habr.com/ru/post/89651/



All Articles