<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://maemo.octonezd.me/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=146.201.180.200</id>
	<title>Maemo Wiki Mirror - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://maemo.octonezd.me/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=146.201.180.200"/>
	<link rel="alternate" type="text/html" href="https://maemo.octonezd.me/index.php/Special:Contributions/146.201.180.200"/>
	<updated>2026-04-21T23:22:27Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://maemo.octonezd.me/index.php?title=Free_up_rootfs_space&amp;diff=10505</id>
		<title>Free up rootfs space</title>
		<link rel="alternate" type="text/html" href="https://maemo.octonezd.me/index.php?title=Free_up_rootfs_space&amp;diff=10505"/>
		<updated>2011-02-27T06:49:15Z</updated>

		<summary type="html">&lt;p&gt;146.201.180.200: /* Move some of the pre-installed applications into /opt */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Danger}}&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a simple howto for those suffering from lack of space in rootfs. The first suggestion is more of a temporary matter, for example to get enough space to install an update, but it&#039;s also the fastest and easiest. The suggestions are in order of potential threat to operating system. Least dangerous first and the most dangerous last. The rest are more permanent (and thus more useful), but they require [[root access]].&lt;br /&gt;
&lt;br /&gt;
==Listing rootfs space on your device ==&lt;br /&gt;
&lt;br /&gt;
Use this command to determine how much rootfs space is allocated, used, and available on your device.&lt;br /&gt;
&lt;br /&gt;
 df -h /&lt;br /&gt;
&lt;br /&gt;
If you want to see all filesystems, use only &amp;quot;df -h&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Freeing up space ==&lt;br /&gt;
&lt;br /&gt;
===Disable Extras-testing, Extras-devel, and/or any other third party repositories===&lt;br /&gt;
&lt;br /&gt;
Simply check the disabled box and save in the Application Manager&#039;s catalogues menu. Wait for app manger to update the lists. This only helps if you actually had these repositories enabled.&lt;br /&gt;
&lt;br /&gt;
Disabling [[extras-testing]] and [[extras-devel]] will (currently) give you an extra 5 MB in rootfs&lt;br /&gt;
&lt;br /&gt;
===Clear apt cache===&lt;br /&gt;
&lt;br /&gt;
Run following command (has to be done as root)&lt;br /&gt;
&lt;br /&gt;
 apt-get clean&lt;br /&gt;
&lt;br /&gt;
will release probably near 10 MB.&lt;br /&gt;
&lt;br /&gt;
===Remove unused dependencies===&lt;br /&gt;
&lt;br /&gt;
Run following command (has to be done as root)&lt;br /&gt;
&lt;br /&gt;
 apt-get autoremove&lt;br /&gt;
&lt;br /&gt;
===Purge unused configuration files===&lt;br /&gt;
&lt;br /&gt;
Even when you have uninstalled a package it may leave configuration files on your system. Use dpkg to find uninstalled packages with configuration files still in place:&lt;br /&gt;
&lt;br /&gt;
 dpkg -l|grep ^rc&lt;br /&gt;
&lt;br /&gt;
Remove the configuration files by purging the packages:&lt;br /&gt;
&lt;br /&gt;
 dpkg --purge foo bar&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to purge all packages with uninstalled configuration files by hand, this line might come handy (as root, or with sudo in xargs):&lt;br /&gt;
&lt;br /&gt;
  dpkg -l | grep ^rc | cut -d &amp;quot; &amp;quot; -f 3 | xargs dpkg --purge&lt;br /&gt;
&lt;br /&gt;
===List of big and rarely used files===&lt;br /&gt;
&lt;br /&gt;
You can&#039;t just delete these files, this is just a list with ideas! You have to know what you are going to do with them (optify, backup+remove, etc.).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr/lib/locale/locale-archive&amp;lt;/code&amp;gt; (28 MB) : stupid idea : if you do such a thing, you will loose all the constant texts as the names of days (&amp;quot;Monday&amp;quot;,&amp;quot;Tuesday&amp;quot;,...). Who has written a such advice ?&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr/share/locale&amp;lt;/code&amp;gt; (10 MB, but you have to keep at least the languages you use)&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr/share/themes/alpha&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/beta&amp;lt;/code&amp;gt; (they use 5-6 MB each, keep the one you use - REMOVING THESE WILL GENERALLY MESS UP YOUR UI - do not simply remove them with &amp;quot;rm -f $dir&amp;quot; - use &amp;quot;apt-get remove [hildon-theme-alpha|hildon-theme-beta]&amp;quot; Similarly you can reinstall them the same way. Dependency apps: &amp;quot;bluezwitch cherry feedingit google-search-widget hildon-desktop hildon-desktop-python-loader hildon-theme-alpha&amp;quot;)&lt;br /&gt;
  hildon-theme-beta mp-fremantle-002-pr osso-startup-wizard ovi-promotion-widget)&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr/share/fonts/arabic&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/chinese&amp;lt;/code&amp;gt; (2,5 MB less for people who don&#039;t speak those two languages)&lt;br /&gt;
&lt;br /&gt;
===Move apt cache outside of rootfs===&lt;br /&gt;
&lt;br /&gt;
If you run into a problem while using apt-get you can temporarily (for one command only) have the apt cache outside rootfs to be able to download larger deb files.&lt;br /&gt;
&lt;br /&gt;
Create a download folder on the eMMC to be used for the downloaded packages instead of the default apt archive folder.&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /home/user/MyDocs/apt-archive-cache/archives/partial&lt;br /&gt;
&lt;br /&gt;
Now execute apt-get with the -o option as root:&lt;br /&gt;
&lt;br /&gt;
 apt-get -o dir::cache=/home/user/MyDocs/apt-archive-cache &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for &amp;lt;code&amp;gt;&amp;lt;command&amp;gt;&amp;lt;/code&amp;gt; you can enter the command you normally would use after apt-get.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
 apt-get -o dir::cache=/home/user/MyDocs/apt-archive-cache dist-upgrade&lt;br /&gt;
 &lt;br /&gt;
 apt-get -o dir::cache=/home/user/MyDocs/apt-archive-cache install &amp;lt;package&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Optify Python===&lt;br /&gt;
&lt;br /&gt;
If you have installed python or a python program before it was optified, you can optify it with this method. First [[Terminal#Opening_the_terminal|open a console]], then type the following commands as root:&lt;br /&gt;
&lt;br /&gt;
 apt-get install pymaemo-optify&lt;br /&gt;
 apt-get clean&lt;br /&gt;
&lt;br /&gt;
When the program is installed, type df -h in the xterm to see if it worked.&lt;br /&gt;
The output should now contain lines similar to this one:&lt;br /&gt;
&lt;br /&gt;
 /opt/pymaemo/usr/lib/python2.5&lt;br /&gt;
                       2064208    471712   1487640  24% /usr/lib/python2.5&lt;br /&gt;
&lt;br /&gt;
===Remove non-optified packages===&lt;br /&gt;
&lt;br /&gt;
If you have installed programs from extras-devel, third party repositories or rarely, but possible, extras-testing, the programs might not be properly optified. Removing these might help with rootfs space.&lt;br /&gt;
&lt;br /&gt;
You can free space by uninstalling applications that you do not need. A problem is if you do not know how these applications are called. To find it out:&lt;br /&gt;
&lt;br /&gt;
* [[Terminal#Opening_the_terminal|Open a console]]&lt;br /&gt;
* Start the application that you do not need&lt;br /&gt;
* In the Terminal/console, type:&lt;br /&gt;
 ps -ef&lt;br /&gt;
You get a listing of all running processes, including the application you just started. To find out what package an application belongs to, enter&lt;br /&gt;
 dpkg --search $(which &#039;&#039;processname&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Source: http://talk.maemo.org/showpost.php?p=468063&amp;amp;postcount=1&lt;br /&gt;
&lt;br /&gt;
===Custom scripts===&lt;br /&gt;
&lt;br /&gt;
====Script to free up space on rootfs====&lt;br /&gt;
&lt;br /&gt;
This script will move some unnecessary files on rootfs to /home/opt/ to free up space on rootfs.&lt;br /&gt;
&lt;br /&gt;
BEWARE: Icon Label Issue May Occur. &lt;br /&gt;
http://talk.maemo.org/showthread.php?p=654384#post654384&lt;br /&gt;
&lt;br /&gt;
First, create a file, move-to-opt.sh for example, containing this script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Nokia N900 Maemo 5 Script to free up space on rootfs&lt;br /&gt;
# ignoring errors when creating dirs that may already exist&lt;br /&gt;
 &lt;br /&gt;
# Moving ?? icons to /home/opt&lt;br /&gt;
mkdir -p /home/opt/usr/share/icons 2&amp;gt; /dev/null&lt;br /&gt;
cp -r /usr/share/icons/* /home/opt/usr/share/icons&lt;br /&gt;
rm -r /usr/share/icons&lt;br /&gt;
ln -s /home/opt/usr/share/icons /usr/share/icons&lt;br /&gt;
&lt;br /&gt;
# Moving video on start-up to /home/opt&lt;br /&gt;
mkdir -p /home/opt/usr/share/hildon-welcome 2&amp;gt; /dev/null&lt;br /&gt;
cp -r /usr/share/hildon-welcome/* /home/opt/usr/share/hildon-welcome&lt;br /&gt;
rm -r /usr/share/hildon-welcome&lt;br /&gt;
ln -s /home/opt/usr/share/hildon-welcome /usr/share/hildon-welcome&lt;br /&gt;
&lt;br /&gt;
# ??&lt;br /&gt;
mkdir -p /home/opt/usr/share/pixmaps 2&amp;gt; /dev/null&lt;br /&gt;
cp -r /usr/share/pixmaps/* /home/opt/usr/share/pixmaps&lt;br /&gt;
rm -r /usr/share/pixmaps&lt;br /&gt;
ln -s /home/opt/usr/share/pixmaps /usr/share/pixmaps&lt;br /&gt;
&lt;br /&gt;
# Moving &#039;apt cache&#039; to /home/opt - Valid until [https://bugs.maemo.org/show_bug.cgi?id=5746 Bug 5746] is fixed.&lt;br /&gt;
mkdir -p /home/opt/var/cache/apt 2&amp;gt; /dev/null&lt;br /&gt;
cp -r /var/cache/apt/* /home/opt/var/cache/apt&lt;br /&gt;
rm -r /var/cache/apt&lt;br /&gt;
ln -s /home/opt/var/cache/apt /var/cache/apt&lt;br /&gt;
&lt;br /&gt;
# Moving locales [http://talk.maemo.org/showpost.php?p=568370&amp;amp;postcount=11 Source]&lt;br /&gt;
mv /usr/share/locale /opt&lt;br /&gt;
ln -s /opt/locale /usr/share/locale&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Set the script&#039;s permission for executable:&lt;br /&gt;
 chmod +x move-to-opt.sh&lt;br /&gt;
(note that this step will - without warning you in any way - not work on partitions which are only FAT formatted, as maybe your microSD card will initially be; in such a case, move the script somewhere else)&lt;br /&gt;
&lt;br /&gt;
Run the script as root:&lt;br /&gt;
 ./move-to-opt.sh&lt;br /&gt;
&lt;br /&gt;
====Script to safely free space on rootfs====&lt;br /&gt;
&lt;br /&gt;
[[User:Tanner#Safely_free_some_space_on_rootfs|This script]] shows you how much space will be freed and automatically detects whether some directories have already been moved.&lt;br /&gt;
&lt;br /&gt;
BEWARE: Icon Label Issue May Occur. &lt;br /&gt;
http://talk.maemo.org/showthread.php?p=654384#post654384&lt;br /&gt;
&lt;br /&gt;
====Move some of the pre-installed applications into /opt====&lt;br /&gt;
&lt;br /&gt;
Some applications like Nokia Maps and the microb-engine are placed in /usr/share taking up valuable root space, moving these files will not affect the apps. Moving Nokia Maps (has to be done as root) will save 8.7 Mb:&lt;br /&gt;
&lt;br /&gt;
 mv /usr/share/nokia-maps /home/opt/&lt;br /&gt;
 ln -s /home/opt/nokia-maps /usr/share/nokia-maps&lt;br /&gt;
Moving the microb-engine (has to be done as root) will save 13.9 Mb:&lt;br /&gt;
 mv /usr/share/microb-engine /home/opt&lt;br /&gt;
 ln -s /home/opt/microb-engine /usr/share/microb-engine&lt;br /&gt;
Moving the &amp;quot;Getting started&amp;quot; app/tutorial (has to be done as root) will save 0.9 Mb:&lt;br /&gt;
 mv /usr/share/tutorial-applet /home/opt&lt;br /&gt;
 ln -s /home/opt/tutorial-applet /usr/share/tutorial-applet&lt;br /&gt;
&lt;br /&gt;
(With the CSSU - and possibly without on PR1.3 - the tutorial may be uninstalled, getting rid of the tutorial folder entirely)&lt;br /&gt;
&lt;br /&gt;
====Move themes====&lt;br /&gt;
&lt;br /&gt;
{{ambox&lt;br /&gt;
| type = notice&lt;br /&gt;
| text = &#039;&#039;&#039;This may cause problems when changing themes, and reversing it is NOT possible unless the device is [[Updating the firmware|reflashed]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Add the following into the script above OR add into another script (with #!/bin/sh at the start)&lt;br /&gt;
&lt;br /&gt;
 # Moving themes to /home/opt&lt;br /&gt;
 mkdir -p /home/opt/usr/share/themes 2&amp;gt; /dev/null&lt;br /&gt;
 cp -r /usr/share/themes/* /home/opt/usr/share/themes&lt;br /&gt;
 rm -r /usr/share/themes&lt;br /&gt;
 ln -s /home/opt/usr/share/themes /usr/share/themes&lt;br /&gt;
&lt;br /&gt;
====See rootfs usage per package====&lt;br /&gt;
&lt;br /&gt;
This script [http://www.robinhill.me.uk/downloads/pkgsize.py] outputs a list of all packages in rootfs and their size therein. I can not vouch for its validity but it seemed decent enough.&lt;br /&gt;
&amp;quot;python pkgsize.py checkpkgs | sort -n&amp;quot; gives you a sorted result in bytes. Most of these files are supposed to be there but it might help you find some non optified ones.&lt;br /&gt;
&lt;br /&gt;
from [http://www.robinhill.me.uk/maemo/package_sizes.html]&lt;br /&gt;
&lt;br /&gt;
[[Category:Power users]]&lt;br /&gt;
[[Category:N900]]&lt;br /&gt;
[[Category:Firmware update]]&lt;/div&gt;</summary>
		<author><name>146.201.180.200</name></author>
	</entry>
	<entry>
		<id>https://maemo.octonezd.me/index.php?title=Community_SSU/Features/Portrait_mode&amp;diff=4475</id>
		<title>Community SSU/Features/Portrait mode</title>
		<link rel="alternate" type="text/html" href="https://maemo.octonezd.me/index.php?title=Community_SSU/Features/Portrait_mode&amp;diff=4475"/>
		<updated>2011-02-23T11:07:11Z</updated>

		<summary type="html">&lt;p&gt;146.201.180.200: /* System Applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Portrait mode can now be [[Community_SSU/Features#Available_as_of_20.2010.36-2maemo12_.28PR_1.3.3.7-6.29|forced on all applications]] as part of the [[Community SSU]]. Not all applications work perfectly. Details of the compatibility of applications with portrait mode is compiled below.&lt;br /&gt;
&lt;br /&gt;
===Portrait Mode Compatibility===&lt;br /&gt;
====System Applications====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=1&lt;br /&gt;
! width=&amp;quot;170&amp;quot; | Application&lt;br /&gt;
! width=&amp;quot;100&amp;quot; | Status&lt;br /&gt;
!| Comments&lt;br /&gt;
|-&lt;br /&gt;
| Camera || Semi-usable || Display is buggy, Photo is taken correctly&lt;br /&gt;
|-&lt;br /&gt;
| Clock || Semi-usable || Icons are not rearranged. Can&#039;t access &amp;quot;World Clock&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Media Player    || Semi-usable    || Icons are not rearranged.&lt;br /&gt;
|-&lt;br /&gt;
| Contacts || Fully Usable    || N/A&lt;br /&gt;
|-&lt;br /&gt;
| Phone|| Fully Usable    || Add new contact UI error&lt;br /&gt;
|-&lt;br /&gt;
| Conversation || Fully Usable    || Needs to scrolls horizontally to read the full message.&lt;br /&gt;
|-&lt;br /&gt;
| Calendar|| Not Usable    || &lt;br /&gt;
|-&lt;br /&gt;
| Web || Fully Usable    || When using built-in auto-rotation, ui elements such as address and status bar are unaccessible. When rotated by hildon but the browser itself has rotation disabled, just about all UI elements are usable.&lt;br /&gt;
|-&lt;br /&gt;
| Hildon-Desktop(?)|| Not Available    || &lt;br /&gt;
|-&lt;br /&gt;
| Task Switcher|| Not Available    || Part of hildon-desktop&lt;br /&gt;
|-&lt;br /&gt;
| Settings|| Fully Usable    || N/A&lt;br /&gt;
|-&lt;br /&gt;
| Photo Viewer || Semi-Usable    || Viewing photos is buggy. The system get confused which direction to show image and thus image rotates haphazardly&lt;br /&gt;
|-&lt;br /&gt;
| Xterminal || Fully Usable    || Rotation from portrait to landscape generates a large amount of &amp;quot;blank&amp;quot; space between the last lines of the history, and the current command-input line.&lt;br /&gt;
|-&lt;br /&gt;
| File Manager|| Fully Usable    || N/A&lt;br /&gt;
|-&lt;br /&gt;
| Application Manager|| Fully Usable    || When portrait mode looses colour and when back in landscape there is flicker and takes time to rearrange&lt;br /&gt;
|-&lt;br /&gt;
| Modest || Fully Usable || There is an issue with the size of the New Mail button which is fixed right when u click it&lt;br /&gt;
|-&lt;br /&gt;
|Backup || Fully Usable || N/A&lt;br /&gt;
|-&lt;br /&gt;
|Calculator || Not Usable || The keys don&#039;t align to the portrait mode&lt;br /&gt;
|-&lt;br /&gt;
|Notes || Fully Usable || N/A&lt;br /&gt;
|-&lt;br /&gt;
| Clock || Not Usable || The 3 bottom selection buttons do not get aligned to Portrait mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====3rd Party Applications====&lt;br /&gt;
&#039;&#039;Which of these already support rotation?  Which require to be forced?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=1&lt;br /&gt;
! width=&amp;quot;170&amp;quot; | Application&lt;br /&gt;
! width=&amp;quot;100&amp;quot; | Status&lt;br /&gt;
!| Comments&lt;br /&gt;
|-&lt;br /&gt;
| CBRpager|| Fully Usable    || In portrait mode, some of the buttons are hidden.&lt;br /&gt;
|-&lt;br /&gt;
| Gpodder    || Fully Usable    || Some small changes to be made&lt;br /&gt;
|-&lt;br /&gt;
| Fast Application Manager || Fully Usable    || N/A&lt;br /&gt;
|-&lt;br /&gt;
| FBReader || Fully Usable    || In portrait mode, some of the icons are hidden.&lt;br /&gt;
|-&lt;br /&gt;
| FeedingIt|| Fully Usable    || N/A&lt;br /&gt;
|-&lt;br /&gt;
| Munadi || Fully Usable    || N/A&lt;br /&gt;
|-&lt;br /&gt;
| QWP || Fully Usable    || N/A&lt;br /&gt;
|-&lt;br /&gt;
| www2sms|| Not Usable    || All buttons are off-screen&lt;br /&gt;
|-&lt;br /&gt;
| DropN900|| Fully Usable    || Some inconvenience with resizing of columns&lt;br /&gt;
|-&lt;br /&gt;
| Foreca Weather|| Not Usable|| Some buttons off- screen. Horizantal Scrolling not possible&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>146.201.180.200</name></author>
	</entry>
	<entry>
		<id>https://maemo.octonezd.me/index.php?title=Community_SSU/Features&amp;diff=4376</id>
		<title>Community SSU/Features</title>
		<link rel="alternate" type="text/html" href="https://maemo.octonezd.me/index.php?title=Community_SSU/Features&amp;diff=4376"/>
		<updated>2011-02-18T00:06:01Z</updated>

		<summary type="html">&lt;p&gt;146.201.180.200: /* Description how to edit transitions.ini */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Placeholder / WIP&lt;br /&gt;
&lt;br /&gt;
http://thpmaemo.blogspot.com/2011/02/community-ssu-features-to-look-forward.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Description how to edit transitions.ini ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The file to edit is transitions.ini and is in &lt;br /&gt;
&lt;br /&gt;
/usr/share/hildon-desktop/&lt;br /&gt;
&lt;br /&gt;
If you use a theme that has a custom transitions.ini file, it will override the one above, so check in /opt/usr/share/themes/[name of the theme you&#039;re using]/transitions.ini, if changing the transitions.ini file in the above path doesn&#039;t work.&lt;br /&gt;
&lt;br /&gt;
To enable the blurless effect you have to edit the file (I use leafpad, but any editor works)&lt;br /&gt;
&lt;br /&gt;
leafpad /usr/share/hildon-desktop/transitions.ini&lt;br /&gt;
&lt;br /&gt;
the last lines are #special tweaks, if you want to enable blurless yo have to edit it like this&lt;br /&gt;
&lt;br /&gt;
blurless = 1&lt;br /&gt;
&lt;br /&gt;
and for taskswitcher you can chose 1, 2 columns  or de default&lt;br /&gt;
&lt;br /&gt;
taskswitcher = 2&lt;br /&gt;
&lt;br /&gt;
--[[User:iktwo|iktwo]] 18:41, 17 February 2011 (UTC)&lt;/div&gt;</summary>
		<author><name>146.201.180.200</name></author>
	</entry>
	<entry>
		<id>https://maemo.octonezd.me/index.php?title=Task:Open_Source_Proof_Points&amp;diff=40179</id>
		<title>Task:Open Source Proof Points</title>
		<link rel="alternate" type="text/html" href="https://maemo.octonezd.me/index.php?title=Task:Open_Source_Proof_Points&amp;diff=40179"/>
		<updated>2011-02-10T07:01:16Z</updated>

		<summary type="html">&lt;p&gt;146.201.180.200: /* Patches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{task|proposed}}&lt;br /&gt;
&lt;br /&gt;
{{quotation|After youtube’s madness, I wouldn’t ever underestimate the creativity of the kids anymore. After wikipedia, the Linux kernel, KDE, GNOME, Webkit and Firefox, I wouldn’t ever underestimate the energy of volunteer experts anymore.|[http://pvanhoof.be/blog/index.php/2008/10/05/comparing-mobile-development-to-the-music-industry From the mind of Philip]}}&lt;br /&gt;
&lt;br /&gt;
All we know open source is great, but in addition of the aim and the theory it is good to collect real cases. Those proof points should be based on the Maemo platform and showcase examples of open source contribution goodness. Examples on how community contributions are helping Nokia building a better platform and shipping commercial products with it.&lt;br /&gt;
&lt;br /&gt;
== Application Manager ==&lt;br /&gt;
&lt;br /&gt;
The open Application Manager has allowed community developers to step in and begin [[Task:Improving the Application manager|improving it]] without [http://www.internettablettalk.com/forums/showthread.php?t=24582 waiting for Nokia].&lt;br /&gt;
&lt;br /&gt;
== Patches ==&lt;br /&gt;
&lt;br /&gt;
Community members have [https://bugs.maemo.org/buglist.cgi?query_format=advanced&amp;amp;short_desc_type=allwordssubstr&amp;amp;short_desc=&amp;amp;long_desc_type=substring&amp;amp;long_desc=&amp;amp;bug_file_loc_type=allwordssubstr&amp;amp;bug_file_loc=&amp;amp;status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=&amp;amp;keywords_type=allwords&amp;amp;keywords=patch&amp;amp;emailassigned_to1=1&amp;amp;emailtype1=substring&amp;amp;email1=&amp;amp;emailassigned_to2=1&amp;amp;emailreporter2=1&amp;amp;emailqa_contact2=1&amp;amp;emailcc2=1&amp;amp;emailtype2=substring&amp;amp;email2=&amp;amp;bugidtype=include&amp;amp;bug_id=&amp;amp;votes=&amp;amp;chfieldfrom=&amp;amp;chfieldto=Now&amp;amp;chfieldvalue=&amp;amp;cmdtype=doit&amp;amp;order=Reuse+same+sort+as+last+time&amp;amp;field0-0-0=noop&amp;amp;type0-0-0=noop&amp;amp;value0-0-0= submitted many patches] to Maemo thanks to its open nature.&lt;br /&gt;
&lt;br /&gt;
Some of these are currently being integrated into a Community Seamless Software Update - updates and upgrades to N900&#039;s Maemo 5 core software that can be installed as a normal firmware update, provided entirely by community members.&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
Some of the best community contributions are simply applications!&lt;br /&gt;
=== Maemo Mapper===&lt;br /&gt;
Maemo Mapper has been here since OS2006 on the 770, and is a community-built, open source mapping application with GPS support. It&#039;s an excellent alternative to the default Map application included with OS2008/Diablo.&lt;br /&gt;
=== Canola ===&lt;br /&gt;
Possibly a jewel of open-source on the tablets, Canola (again, since OS2006) is a (soon to be?) open-source media center for the tablet. It&#039;s got plug-ins for last.fm, YouTube, and has a built-in podcast downloader and photo-viewer. It can download cover-art automatically (again, with a plug-in) and do plenty of neat tricks.&lt;br /&gt;
=== MPlayer ===&lt;br /&gt;
Why wasn&#039;t this included by default in OS2008, or at least Diablo? It supports every bloody format you can throw at it, and is a massive improvement over the default. There are also frontends that increase usability.&lt;br /&gt;
&lt;br /&gt;
== Alternative Operating Systems ==&lt;br /&gt;
{{main|Alternative operating systems}}&lt;br /&gt;
Many ports of other operating systems have been done and can be installed with little trouble, thanks to a great deal of community support and documentation.&lt;/div&gt;</summary>
		<author><name>146.201.180.200</name></author>
	</entry>
	<entry>
		<id>https://maemo.octonezd.me/index.php?title=Remapping_keyboard&amp;diff=35701</id>
		<title>Remapping keyboard</title>
		<link rel="alternate" type="text/html" href="https://maemo.octonezd.me/index.php?title=Remapping_keyboard&amp;diff=35701"/>
		<updated>2011-02-10T01:46:08Z</updated>

		<summary type="html">&lt;p&gt;146.201.180.200: /* Known Remap Bugs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you are not satisfied with your hardware keyboard layout, with root access (through rootsh or ssh) you can modify that as follows.&lt;br /&gt;
&lt;br /&gt;
== Permanent remap ==&lt;br /&gt;
&lt;br /&gt;
You need to edit this file on your [[Nokia N900|N900]]: &amp;lt;code&amp;gt;/usr/share/X11/xkb/symbols/nokia_vndr/rx-51&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This can be done by using vi, which is ran from command line with the command &amp;quot;vi [file path and name of file to be opened]&amp;quot;. (Instructions on how to use vi - it&#039;s not intuitive - can be found online easily.) To be able to actually edit the rx-51 file, you have to be root already. You cannot become root from within vi. Any other text or source code editor works too, such as leafpad.&lt;br /&gt;
&lt;br /&gt;
You should however make a copy first in case something goes wrong, but &#039;&#039;&#039;do not place the copy in the &amp;lt;code&amp;gt;nokia_vndr&amp;lt;/code&amp;gt; folder or it will stop your phone from booting&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After modifying the rx-51 file, type `&amp;lt;tt&amp;gt;setxkbmap&amp;lt;/tt&amp;gt;&#039; to apply any changes for English keyboards, `&amp;lt;tt&amp;gt;setxkbmap de&amp;lt;/tt&amp;gt;&#039; for German keyboards, etc. If you see an error you should replace the rx-51 file with your backup - if you don&#039;t the device will fail to boot and you&#039;ll have to [[Updating the firmware|reflash]] it!&lt;br /&gt;
&lt;br /&gt;
If you are satisfied with your new rx-51 file, do also backup that. The next firmware upgrade might restore it to the factory default.&lt;br /&gt;
&lt;br /&gt;
Locales and languages can also be added with relevant [http://www.solotype.com/en-us/Category/52-keyboard-layout.aspx keyboard stickers].&lt;br /&gt;
&lt;br /&gt;
=== Remapping keyboard arrows ===&lt;br /&gt;
&lt;br /&gt;
In the English variant of the N900 keyboard arrow keys have no extra symbols attached to them.&lt;br /&gt;
&lt;br /&gt;
You can remap those keys to add things such as accents, umlauts or&lt;br /&gt;
other useful symbols (e.g. `&amp;lt;tt&amp;gt;|&amp;lt;/tt&amp;gt;&#039;, `&amp;lt;tt&amp;gt;&amp;amp;lt;&amp;lt;/tt&amp;gt;&#039; or `&amp;lt;tt&amp;gt;&amp;amp;gt;&amp;lt;/tt&amp;gt;&#039; for the X terminal).&lt;br /&gt;
&lt;br /&gt;
The arrow keys are located at the end of the file. This example shows how to add dead acute, grave, tilde and circumflex accents (useful for writing in Portuguese) Press Fn+Up/Down/Left/Right to use these accents.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xkb_symbols &amp;quot;arrows_4btns&amp;quot; {&lt;br /&gt;
    key &amp;lt;UP&amp;gt;   { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Up, dead_circumflex ] };&lt;br /&gt;
    key &amp;lt;LEFT&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Left, dead_acute ] };&lt;br /&gt;
    key &amp;lt;DOWN&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Down, dead_tilde ] };&lt;br /&gt;
    key &amp;lt;RGHT&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Right, dead_grave ] };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example adds German umlauts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xkb_symbols &amp;quot;arrows_4btns&amp;quot; {&lt;br /&gt;
    key &amp;lt;UP&amp;gt;   { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Up, udiaeresis ] };&lt;br /&gt;
    key &amp;lt;LEFT&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Left, odiaeresis ] };&lt;br /&gt;
    key &amp;lt;DOWN&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Down, adiaeresis ] };&lt;br /&gt;
    key &amp;lt;RGHT&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Right, ssharp ] };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one adds Page Up, Page Down, Home and End:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xkb_symbols &amp;quot;arrows_4btns&amp;quot; {&lt;br /&gt;
    key &amp;lt;UP&amp;gt;   { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Up, Page_Up ] };&lt;br /&gt;
    key &amp;lt;LEFT&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Left, Home ] };&lt;br /&gt;
    key &amp;lt;DOWN&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Down, Page_Down ] };&lt;br /&gt;
    key &amp;lt;RGHT&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Right, End ] };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one gives Escape and Tab when pressing Fn+Left/Right, and the characters &#039;^&#039;, &#039;~&#039;, &#039;&amp;lt;&#039; and &#039;&amp;gt;&#039; when pressing Shift+Up/Down/Left/Right&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xkb_symbols &amp;quot;arrows_4btns&amp;quot; {&lt;br /&gt;
    key &amp;lt;UP&amp;gt;	{ type[Group1] = &amp;quot;FOUR_LEVEL&amp;quot;,symbols[Group1] = [ Up, asciicircum, PageUp, PageUp ] };&lt;br /&gt;
    key &amp;lt;LEFT&amp;gt;	{ type[Group1] = &amp;quot;FOUR_LEVEL&amp;quot;, symbols[Group1] = [ Left, less, Escape, Escape ] };&lt;br /&gt;
    key &amp;lt;DOWN&amp;gt;	{ type[Group1] = &amp;quot;FOUR_LEVEL&amp;quot;, symbols[Group1] = [ Down, asciitilde, PageDown, PageDown ] };&lt;br /&gt;
    key &amp;lt;RGHT&amp;gt;	{ type[Group1] = &amp;quot;FOUR_LEVEL&amp;quot;, symbols[Group1] = [ Right, greater, Tab, Tab ] };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;thp&#039;s mapping&#039;&#039;&#039;: Helpful for Python, Vim and the Shell with the occasional German (umlauts and ß) thrown in. This one adds the dead diaeresis (for Umlauts) to Shift+Fn+Up, % to Fn+Up, | to Shift+Up. Left and Right are mapped so that Shift gives &amp;lt;&amp;gt;, Fn gives [] and Shift+Fn gives {} (especially useful for programmers). It also maps Escape to Shift+Down, Tab to Fn+Down and ß to Shift+Fn+Down.&lt;br /&gt;
&lt;br /&gt;
Semantic explanation: Left, Right are all kinds of bracket pairs, Shift+Fn is for German characters (&#039;&#039;&#039;u&#039;&#039;&#039;p as in Umlauts, down for ß), Up has visible special characters (% and |) and Down has invisible special keys (Tab and Escape).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xkb_symbols &amp;quot;arrows_4btns&amp;quot; {&lt;br /&gt;
    key &amp;lt;UP&amp;gt;    { type[Group1] = &amp;quot;FOUR_LEVEL&amp;quot;, symbols[Group1] = [      Up,     bar,    percent,        dead_diaeresis  ] };&lt;br /&gt;
    key &amp;lt;LEFT&amp;gt;  { type[Group1] = &amp;quot;FOUR_LEVEL&amp;quot;, symbols[Group1] = [      Left,   less,   bracketleft,    braceleft       ] };&lt;br /&gt;
    key &amp;lt;DOWN&amp;gt;  { type[Group1] = &amp;quot;FOUR_LEVEL&amp;quot;, symbols[Group1] = [      Down,   Escape, Tab,    ssharp  ] };&lt;br /&gt;
    key &amp;lt;RGHT&amp;gt;  { type[Group1] = &amp;quot;FOUR_LEVEL&amp;quot;, symbols[Group1] = [      Right,  greater,        bracketright,   braceright      ] };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of couse all these are just examples. You can add any other symbol you like, or you can remap any other key, not just the arrows.&lt;br /&gt;
&lt;br /&gt;
If you want to know the name of a symbol, just take a look at this list of standard PC keyboard layouts as an example:&lt;br /&gt;
&lt;br /&gt;
http://cgit.freedesktop.org/xkeyboard-config/tree/symbols/&lt;br /&gt;
&lt;br /&gt;
An alternative approach for getting custom special characters is to edit the [[Special characters view]].&lt;br /&gt;
&lt;br /&gt;
Note: the pipe symbol is called &amp;quot;bar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Example for keyboard with only two arrow keys ===&lt;br /&gt;
&lt;br /&gt;
Non-English keyboards typically have only two keys for arrows, with Up and Down composed as Fn+Left and Fn+Right, respectively.&lt;br /&gt;
&lt;br /&gt;
In this situation it may be useful to remap keys with characters carrying accents such that one of it is a dead accent, freeing other keys for special characters that you want to have on the hardware keyboard.&lt;br /&gt;
&lt;br /&gt;
For example, on a German keyboard there are three keys occupied by umlauts ä, ö, and ü. The following modification changes ü into dead diaeresis, so that ä, ö, and ü are produced by pressing ü followed by a, o, and u. This way one can also put diaeresis on e, i, and y which occur in other languages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
partial alphanumeric_keys&lt;br /&gt;
xkb_symbols &amp;quot;de&amp;quot; {&lt;br /&gt;
    include &amp;quot;nokia_vndr/rx-51(english_base)&amp;quot;&lt;br /&gt;
    include &amp;quot;nokia_vndr/rx-51(arrows_2btns)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    name[Group1] = &amp;quot;German&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    // 1. row&lt;br /&gt;
    key &amp;lt;AD06&amp;gt;  { [ z, Z, 6, 6 ] };&lt;br /&gt;
    // key &amp;lt;AB08&amp;gt; { [ udiaeresis, Udiaeresis, ssharp, ssharp ] };&lt;br /&gt;
    key &amp;lt;AB08&amp;gt;  { [ dead_diaeresis, asciicircum, ssharp, ssharp ] };&lt;br /&gt;
&lt;br /&gt;
    // 2. row&lt;br /&gt;
    key &amp;lt;AC08&amp;gt;  { [ k,  K, semicolon, semicolon ] };&lt;br /&gt;
    key &amp;lt;AC09&amp;gt;  { [ l,  L, colon, colon ] };&lt;br /&gt;
    //key &amp;lt;AB09&amp;gt;  { [ odiaeresis, Odiaeresis, exclam, exclam ] };&lt;br /&gt;
    key &amp;lt;AB09&amp;gt;  { [ bracketleft, braceleft, exclam, exclam ] };&lt;br /&gt;
    //key &amp;lt;UP&amp;gt;  { [ adiaeresis, Adiaeresis, question, question ] };&lt;br /&gt;
    key &amp;lt;UP&amp;gt;    { [ bracketright, braceright, question, question ] };&lt;br /&gt;
&lt;br /&gt;
    // 3. row&lt;br /&gt;
    key &amp;lt;AB01&amp;gt;  { [ y, Y, EuroSign, EuroSign ] };&lt;br /&gt;
    key &amp;lt;AB03&amp;gt;  { [ c, C, equal, equal ] };&lt;br /&gt;
    // key &amp;lt;SPCE&amp;gt;  { [ space, space, at, at ] };&lt;br /&gt;
    key &amp;lt;SPCE&amp;gt;  { [ space, asciitilde, at, at ] };&lt;br /&gt;
    //key &amp;lt;LEFT&amp;gt;  { [ period, comma, comma, comma ] };&lt;br /&gt;
    key &amp;lt;LEFT&amp;gt;  { [ period, bar, comma, comma ] };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, brackets and braces have then be mapped on ö, ä, Ö, and Ä. Shift-ü has been used for &amp;quot;^&amp;quot;. Moreover, Shift-Space has been mapped to tilde (a character that often occurs in URLs), and Shift-. has been mapped to &amp;quot;|&amp;quot;. (The previous assignments are commented out by adding &amp;quot;//&amp;quot; in the beginning of a line.)&lt;br /&gt;
&lt;br /&gt;
 setxkbmap de&lt;br /&gt;
&lt;br /&gt;
then tests and installs the new keyboard mapping. The new keymap will be used until the rx-51 file is modified again, which may happen after a firmware upgrade. So keep also a backup copy of your modified rx-51!&lt;br /&gt;
&lt;br /&gt;
In the italian layout, the comma, period, up and left keys are mapped to è, ò, à and comma. In this example, we&#039;ll put the four arrow keys back and we&#039;ll change the keys to allow for all accent combinations regardless.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
partial alphanumeric_keys&lt;br /&gt;
xkb_symbols &amp;quot;it&amp;quot; {&lt;br /&gt;
    include &amp;quot;nokia_vndr/rx-51(english_base)&amp;quot;&lt;br /&gt;
    //include &amp;quot;nokia_vndr/rx-51(arrows_2btns)&amp;quot;&lt;br /&gt;
    include &amp;quot;nokia_vndr/rx-51(arrows_4btns)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    name[Group1] = &amp;quot;Italian&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    // 1. row&lt;br /&gt;
    //key &amp;lt;AB08&amp;gt;  { [ egrave, Egrave, eacute, Eacute ] };&lt;br /&gt;
    key &amp;lt;AB08&amp;gt;  { [ egrave, dead_grave, agrave, dead_acute ] };&lt;br /&gt;
&lt;br /&gt;
    // 2. row&lt;br /&gt;
    key &amp;lt;AC06&amp;gt;  { [ h, H, semicolon, semicolon ] };&lt;br /&gt;
    key &amp;lt;AC07&amp;gt;  { [ j, J, colon, colon ] };&lt;br /&gt;
    key &amp;lt;AC08&amp;gt;  { [ k, K, exclam, exclam ] };&lt;br /&gt;
    key &amp;lt;AC09&amp;gt;  { [ l, L, question, question ] };&lt;br /&gt;
    //key &amp;lt;AB09&amp;gt;  { [ ograve, Ograve, igrave, Igrave ] };&lt;br /&gt;
    key &amp;lt;AB09&amp;gt;  { [ period, comma, ograve, Igrave ] };&lt;br /&gt;
    //key &amp;lt;UP&amp;gt;  { [ agrave, Agrave, ugrave, Ugrave ] };&lt;br /&gt;
&lt;br /&gt;
    // 3. row&lt;br /&gt;
    key &amp;lt;AB01&amp;gt;  { [ z, Z, EuroSign, EuroSign ] };&lt;br /&gt;
    key &amp;lt;AB02&amp;gt;  { [ x, X, parenleft, parenleft ] };&lt;br /&gt;
    key &amp;lt;AB03&amp;gt;  { [ c, C, parenright, parenright ] };&lt;br /&gt;
    //key &amp;lt;LEFT&amp;gt;  { [ period, comma, comma, comma ] };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this setup, you have dead grave and acute accents on Shift-è and Fn-Shift-è, and you have à on Fn-è. Period and comma have been moved to the ò key, as ò and Shift-ò, while ò and ì are on that key, as Fn-ò and Fn-Shift-ò. There&#039;s no key for the ù character, but you can write it using the dead accents (Shift-è and then u).&lt;br /&gt;
&lt;br /&gt;
== Temporary remap ==&lt;br /&gt;
&lt;br /&gt;
Keys can be also remapped temporarily by loading keymap to a file, edit&lt;br /&gt;
that file and then reload changed file to N900 X server; like this (on an X terminal):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xkbcomp :0&lt;br /&gt;
vi server-0.xkb&lt;br /&gt;
xkbcomp server-0.xkb :0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This has the advantage that if keymap get screwed out, running just &amp;lt;code&amp;gt;setxkbmap&amp;lt;/code&amp;gt; will fix it back to original. If this cannot be done, rebooting will fix things for sure.&lt;br /&gt;
&lt;br /&gt;
For arrow key remapping the following script can be handy:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Just noticed that this makes N900 drain battery !!! (N900 was shutdown in the morning). After executing this maemo-xinput-sounds takes &amp;gt;90% of cpu time. Killing the process will be a temporary fix; I&#039;ll look for better solution...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
set -eux&lt;br /&gt;
&lt;br /&gt;
# busybox mktemp is sooo strict: 6 X:s at the end is the only option...&lt;br /&gt;
tf=`mktemp xkb-XXXXXX`&lt;br /&gt;
trap &amp;quot;rm $tf.0 $tf&amp;quot; 0&lt;br /&gt;
&lt;br /&gt;
xkbcomp :0 $tf.0&lt;br /&gt;
&lt;br /&gt;
perl -pe &#039;&lt;br /&gt;
 sub out ($$$) {&lt;br /&gt;
        print qq(    key &amp;lt;$_[0]&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;,);&lt;br /&gt;
        print qq( symbols[Group1] = [ $_[1], $_[2] ] };);&lt;br /&gt;
        return if s/.*};//; while (&amp;lt;&amp;gt;) { last if s/.*};//; };&lt;br /&gt;
 }&lt;br /&gt;
 s/controls=\)/controls=SlowKeys\)/; # hmm...&lt;br /&gt;
 out &amp;quot;UP&amp;quot;, &amp;quot;Up&amp;quot;, &amp;quot;Odiaeresis&amp;quot; if (/key\s+&amp;lt;UP&amp;gt;/);&lt;br /&gt;
 out &amp;quot;DOWN&amp;quot;, &amp;quot;Down&amp;quot;, &amp;quot;adiaeresis&amp;quot; if (/key\s+&amp;lt;DOWN&amp;gt;/);&lt;br /&gt;
 out &amp;quot;LEFT&amp;quot;, &amp;quot;Left&amp;quot;, &amp;quot;odiaeresis&amp;quot; if (/key\s+&amp;lt;LEFT&amp;gt;/);&lt;br /&gt;
 out &amp;quot;RGHT&amp;quot;, &amp;quot;Right&amp;quot;, &amp;quot;Adiaeresis&amp;quot; if (/key\s+&amp;lt;RGHT&amp;gt;/);&lt;br /&gt;
&#039; $tf.0 &amp;gt; $tf&lt;br /&gt;
&lt;br /&gt;
xkbcomp $tf :0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one maps Up, Down, Left and Right to Ö, ä, ö, Ä, respectively (for finnish/scandinavian users), and is easy to tune for other purposes. Copy this as &amp;lt;code&amp;gt;xk&amp;lt;/code&amp;gt; to home directory on N900 and execute it as &amp;lt;code&amp;gt;sh xk&amp;lt;/code&amp;gt; whenever (seldom) you reboot N900.&lt;br /&gt;
&lt;br /&gt;
== Known Remap Bugs ==&lt;br /&gt;
&lt;br /&gt;
There are some programs that do not pick up remapped keys correctly. X-Terminal, for instance, picks up a tab that&#039;s been mapped to a shift+(key) combination as a shift+tab instead of just tab. MicroB did something similar as of this writing.&lt;br /&gt;
&lt;br /&gt;
As of this writing, FreOffice did not register a tab mapped to either fn+spacebar or shift+spacebar. Other keys for Tab worked fine.&lt;br /&gt;
&lt;br /&gt;
Also, making the arrow keys have four buttons mapped to them instead of just two tends to cause problems with shift+arrow-key to highlight text.&lt;br /&gt;
&lt;br /&gt;
J-k and Z-X are two pairs of keys for which pressing shift+fn+(key) causes the typing of both that key&#039;s fourth-level mapped character, and the pair key&#039;s fourth level character. So, with default mappings, shift+fn+j types &amp;quot;)&amp;amp;&amp;quot;, as does &amp;quot;shift-fn-k&amp;quot;. So mapping those characters to separate keys at the fourth level is typically counter productive, though it could be useful for writing programs, scripts, or just mathematical expressions if you map [ to one and ] to the next one, or {}, (), or &amp;lt;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can delete one of the fourth-row key-maps from the keys in each pair, leaving it with only three characters (make sure to delete the last comma), and then both of those buttons will simply display the one key that&#039;s left.&lt;br /&gt;
&lt;br /&gt;
[[Category:Power users]]&lt;br /&gt;
[[Category:N900]]&lt;/div&gt;</summary>
		<author><name>146.201.180.200</name></author>
	</entry>
	<entry>
		<id>https://maemo.octonezd.me/index.php?title=Remapping_keyboard&amp;diff=35702</id>
		<title>Remapping keyboard</title>
		<link rel="alternate" type="text/html" href="https://maemo.octonezd.me/index.php?title=Remapping_keyboard&amp;diff=35702"/>
		<updated>2011-01-28T03:20:07Z</updated>

		<summary type="html">&lt;p&gt;146.201.180.200: /* Known Remap Bugs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you are not satisfied with your hardware keyboard layout, with root access (through rootsh or ssh) you can modify that as follows.&lt;br /&gt;
&lt;br /&gt;
== Permanent remap ==&lt;br /&gt;
&lt;br /&gt;
You need to edit this file on your [[Nokia N900|N900]]: &amp;lt;code&amp;gt;/usr/share/X11/xkb/symbols/nokia_vndr/rx-51&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This can be done by using vi, which is ran from command line with the command &amp;quot;vi [file path and name of file to be opened]&amp;quot;. (Instructions on how to use vi - it&#039;s not intuitive - can be found online easily.) To be able to actually edit the rx-51 file, you have to be root already. You cannot become root from within vi. Any other text or source code editor works too, such as leafpad.&lt;br /&gt;
&lt;br /&gt;
You should however make a copy first in case something goes wrong, but &#039;&#039;&#039;do not place the copy in the &amp;lt;code&amp;gt;nokia_vndr&amp;lt;/code&amp;gt; folder or it will stop your phone from booting&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After modifying the rx-51 file, type `&amp;lt;tt&amp;gt;setxkbmap&amp;lt;/tt&amp;gt;&#039; to apply any changes for English keyboards, `&amp;lt;tt&amp;gt;setxkbmap de&amp;lt;/tt&amp;gt;&#039; for German keyboards, etc. If you see an error you should replace the rx-51 file with your backup - if you don&#039;t the device will fail to boot and you&#039;ll have to [[Updating the firmware|reflash]] it!&lt;br /&gt;
&lt;br /&gt;
If you are satisfied with your new rx-51 file, do also backup that. The next firmware upgrade might restore it to the factory default.&lt;br /&gt;
&lt;br /&gt;
Locales and languages can also be added with relevant [http://www.solotype.com/en-us/Category/52-keyboard-layout.aspx keyboard stickers].&lt;br /&gt;
&lt;br /&gt;
=== Remapping keyboard arrows ===&lt;br /&gt;
&lt;br /&gt;
In the English variant of the N900 keyboard arrow keys have no extra symbols attached to them.&lt;br /&gt;
&lt;br /&gt;
You can remap those keys to add things such as accents, umlauts or&lt;br /&gt;
other useful symbols (e.g. `&amp;lt;tt&amp;gt;|&amp;lt;/tt&amp;gt;&#039;, `&amp;lt;tt&amp;gt;&amp;amp;lt;&amp;lt;/tt&amp;gt;&#039; or `&amp;lt;tt&amp;gt;&amp;amp;gt;&amp;lt;/tt&amp;gt;&#039; for the X terminal).&lt;br /&gt;
&lt;br /&gt;
The arrow keys are located at the end of the file. This example shows how to add dead acute, grave, tilde and circumflex accents (useful for writing in Portuguese) Press Fn+Up/Down/Left/Right to use these accents.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xkb_symbols &amp;quot;arrows_4btns&amp;quot; {&lt;br /&gt;
    key &amp;lt;UP&amp;gt;   { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Up, dead_circumflex ] };&lt;br /&gt;
    key &amp;lt;LEFT&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Left, dead_acute ] };&lt;br /&gt;
    key &amp;lt;DOWN&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Down, dead_tilde ] };&lt;br /&gt;
    key &amp;lt;RGHT&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Right, dead_grave ] };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example adds German umlauts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xkb_symbols &amp;quot;arrows_4btns&amp;quot; {&lt;br /&gt;
    key &amp;lt;UP&amp;gt;   { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Up, udiaeresis ] };&lt;br /&gt;
    key &amp;lt;LEFT&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Left, odiaeresis ] };&lt;br /&gt;
    key &amp;lt;DOWN&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Down, adiaeresis ] };&lt;br /&gt;
    key &amp;lt;RGHT&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Right, ssharp ] };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one adds Page Up, Page Down, Home and End:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xkb_symbols &amp;quot;arrows_4btns&amp;quot; {&lt;br /&gt;
    key &amp;lt;UP&amp;gt;   { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Up, Page_Up ] };&lt;br /&gt;
    key &amp;lt;LEFT&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Left, Home ] };&lt;br /&gt;
    key &amp;lt;DOWN&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Down, Page_Down ] };&lt;br /&gt;
    key &amp;lt;RGHT&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;, symbols[Group1] = [ Right, End ] };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one gives Escape and Tab when pressing Fn+Left/Right, and the characters &#039;^&#039;, &#039;~&#039;, &#039;&amp;lt;&#039; and &#039;&amp;gt;&#039; when pressing Shift+Up/Down/Left/Right&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xkb_symbols &amp;quot;arrows_4btns&amp;quot; {&lt;br /&gt;
    key &amp;lt;UP&amp;gt;	{ type[Group1] = &amp;quot;FOUR_LEVEL&amp;quot;,symbols[Group1] = [ Up, asciicircum, PageUp, PageUp ] };&lt;br /&gt;
    key &amp;lt;LEFT&amp;gt;	{ type[Group1] = &amp;quot;FOUR_LEVEL&amp;quot;, symbols[Group1] = [ Left, less, Escape, Escape ] };&lt;br /&gt;
    key &amp;lt;DOWN&amp;gt;	{ type[Group1] = &amp;quot;FOUR_LEVEL&amp;quot;, symbols[Group1] = [ Down, asciitilde, PageDown, PageDown ] };&lt;br /&gt;
    key &amp;lt;RGHT&amp;gt;	{ type[Group1] = &amp;quot;FOUR_LEVEL&amp;quot;, symbols[Group1] = [ Right, greater, Tab, Tab ] };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;thp&#039;s mapping&#039;&#039;&#039;: Helpful for Python, Vim and the Shell with the occasional German (umlauts and ß) thrown in. This one adds the dead diaeresis (for Umlauts) to Shift+Fn+Up, % to Fn+Up, | to Shift+Up. Left and Right are mapped so that Shift gives &amp;lt;&amp;gt;, Fn gives [] and Shift+Fn gives {} (especially useful for programmers). It also maps Escape to Shift+Down, Tab to Fn+Down and ß to Shift+Fn+Down.&lt;br /&gt;
&lt;br /&gt;
Semantic explanation: Left, Right are all kinds of bracket pairs, Shift+Fn is for German characters (&#039;&#039;&#039;u&#039;&#039;&#039;p as in Umlauts, down for ß), Up has visible special characters (% and |) and Down has invisible special keys (Tab and Escape).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xkb_symbols &amp;quot;arrows_4btns&amp;quot; {&lt;br /&gt;
    key &amp;lt;UP&amp;gt;    { type[Group1] = &amp;quot;FOUR_LEVEL&amp;quot;, symbols[Group1] = [      Up,     bar,    percent,        dead_diaeresis  ] };&lt;br /&gt;
    key &amp;lt;LEFT&amp;gt;  { type[Group1] = &amp;quot;FOUR_LEVEL&amp;quot;, symbols[Group1] = [      Left,   less,   bracketleft,    braceleft       ] };&lt;br /&gt;
    key &amp;lt;DOWN&amp;gt;  { type[Group1] = &amp;quot;FOUR_LEVEL&amp;quot;, symbols[Group1] = [      Down,   Escape, Tab,    ssharp  ] };&lt;br /&gt;
    key &amp;lt;RGHT&amp;gt;  { type[Group1] = &amp;quot;FOUR_LEVEL&amp;quot;, symbols[Group1] = [      Right,  greater,        bracketright,   braceright      ] };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of couse all these are just examples. You can add any other symbol you like, or you can remap any other key, not just the arrows.&lt;br /&gt;
&lt;br /&gt;
If you want to know the name of a symbol, just take a look at this list of standard PC keyboard layouts as an example:&lt;br /&gt;
&lt;br /&gt;
http://cgit.freedesktop.org/xkeyboard-config/tree/symbols/&lt;br /&gt;
&lt;br /&gt;
An alternative approach for getting custom special characters is to edit the [[Special characters view]].&lt;br /&gt;
&lt;br /&gt;
Note: the pipe symbol is called &amp;quot;bar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Example for keyboard with only two arrow keys ===&lt;br /&gt;
&lt;br /&gt;
Non-English keyboards typically have only two keys for arrows, with Up and Down composed as Fn+Left and Fn+Right, respectively.&lt;br /&gt;
&lt;br /&gt;
In this situation it may be useful to remap keys with characters carrying accents such that one of it is a dead accent, freeing other keys for special characters that you want to have on the hardware keyboard.&lt;br /&gt;
&lt;br /&gt;
For example, on a German keyboard there are three keys occupied by umlauts ä, ö, and ü. The following modification changes ü into dead diaeresis, so that ä, ö, and ü are produced by pressing ü followed by a, o, and u. This way one can also put diaeresis on e, i, and y which occur in other languages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
partial alphanumeric_keys&lt;br /&gt;
xkb_symbols &amp;quot;de&amp;quot; {&lt;br /&gt;
    include &amp;quot;nokia_vndr/rx-51(english_base)&amp;quot;&lt;br /&gt;
    include &amp;quot;nokia_vndr/rx-51(arrows_2btns)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    name[Group1] = &amp;quot;German&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    // 1. row&lt;br /&gt;
    key &amp;lt;AD06&amp;gt;  { [ z, Z, 6, 6 ] };&lt;br /&gt;
    // key &amp;lt;AB08&amp;gt; { [ udiaeresis, Udiaeresis, ssharp, ssharp ] };&lt;br /&gt;
    key &amp;lt;AB08&amp;gt;  { [ dead_diaeresis, asciicircum, ssharp, ssharp ] };&lt;br /&gt;
&lt;br /&gt;
    // 2. row&lt;br /&gt;
    key &amp;lt;AC08&amp;gt;  { [ k,  K, semicolon, semicolon ] };&lt;br /&gt;
    key &amp;lt;AC09&amp;gt;  { [ l,  L, colon, colon ] };&lt;br /&gt;
    //key &amp;lt;AB09&amp;gt;  { [ odiaeresis, Odiaeresis, exclam, exclam ] };&lt;br /&gt;
    key &amp;lt;AB09&amp;gt;  { [ bracketleft, braceleft, exclam, exclam ] };&lt;br /&gt;
    //key &amp;lt;UP&amp;gt;  { [ adiaeresis, Adiaeresis, question, question ] };&lt;br /&gt;
    key &amp;lt;UP&amp;gt;    { [ bracketright, braceright, question, question ] };&lt;br /&gt;
&lt;br /&gt;
    // 3. row&lt;br /&gt;
    key &amp;lt;AB01&amp;gt;  { [ y, Y, EuroSign, EuroSign ] };&lt;br /&gt;
    key &amp;lt;AB03&amp;gt;  { [ c, C, equal, equal ] };&lt;br /&gt;
    // key &amp;lt;SPCE&amp;gt;  { [ space, space, at, at ] };&lt;br /&gt;
    key &amp;lt;SPCE&amp;gt;  { [ space, asciitilde, at, at ] };&lt;br /&gt;
    //key &amp;lt;LEFT&amp;gt;  { [ period, comma, comma, comma ] };&lt;br /&gt;
    key &amp;lt;LEFT&amp;gt;  { [ period, bar, comma, comma ] };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, brackets and braces have then be mapped on ö, ä, Ö, and Ä. Shift-ü has been used for &amp;quot;^&amp;quot;. Moreover, Shift-Space has been mapped to tilde (a character that often occurs in URLs), and Shift-. has been mapped to &amp;quot;|&amp;quot;. (The previous assignments are commented out by adding &amp;quot;//&amp;quot; in the beginning of a line.)&lt;br /&gt;
&lt;br /&gt;
 setxkbmap de&lt;br /&gt;
&lt;br /&gt;
then tests and installs the new keyboard mapping. The new keymap will be used until the rx-51 file is modified again, which may happen after a firmware upgrade. So keep also a backup copy of your modified rx-51!&lt;br /&gt;
&lt;br /&gt;
In the italian layout, the comma, period, up and left keys are mapped to è, ò, à and comma. In this example, we&#039;ll put the four arrow keys back and we&#039;ll change the keys to allow for all accent combinations regardless.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
partial alphanumeric_keys&lt;br /&gt;
xkb_symbols &amp;quot;it&amp;quot; {&lt;br /&gt;
    include &amp;quot;nokia_vndr/rx-51(english_base)&amp;quot;&lt;br /&gt;
    //include &amp;quot;nokia_vndr/rx-51(arrows_2btns)&amp;quot;&lt;br /&gt;
    include &amp;quot;nokia_vndr/rx-51(arrows_4btns)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    name[Group1] = &amp;quot;Italian&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    // 1. row&lt;br /&gt;
    //key &amp;lt;AB08&amp;gt;  { [ egrave, Egrave, eacute, Eacute ] };&lt;br /&gt;
    key &amp;lt;AB08&amp;gt;  { [ egrave, dead_grave, agrave, dead_acute ] };&lt;br /&gt;
&lt;br /&gt;
    // 2. row&lt;br /&gt;
    key &amp;lt;AC06&amp;gt;  { [ h, H, semicolon, semicolon ] };&lt;br /&gt;
    key &amp;lt;AC07&amp;gt;  { [ j, J, colon, colon ] };&lt;br /&gt;
    key &amp;lt;AC08&amp;gt;  { [ k, K, exclam, exclam ] };&lt;br /&gt;
    key &amp;lt;AC09&amp;gt;  { [ l, L, question, question ] };&lt;br /&gt;
    //key &amp;lt;AB09&amp;gt;  { [ ograve, Ograve, igrave, Igrave ] };&lt;br /&gt;
    key &amp;lt;AB09&amp;gt;  { [ period, comma, ograve, Igrave ] };&lt;br /&gt;
    //key &amp;lt;UP&amp;gt;  { [ agrave, Agrave, ugrave, Ugrave ] };&lt;br /&gt;
&lt;br /&gt;
    // 3. row&lt;br /&gt;
    key &amp;lt;AB01&amp;gt;  { [ z, Z, EuroSign, EuroSign ] };&lt;br /&gt;
    key &amp;lt;AB02&amp;gt;  { [ x, X, parenleft, parenleft ] };&lt;br /&gt;
    key &amp;lt;AB03&amp;gt;  { [ c, C, parenright, parenright ] };&lt;br /&gt;
    //key &amp;lt;LEFT&amp;gt;  { [ period, comma, comma, comma ] };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this setup, you have dead grave and acute accents on Shift-è and Fn-Shift-è, and you have à on Fn-è. Period and comma have been moved to the ò key, as ò and Shift-ò, while ò and ì are on that key, as Fn-ò and Fn-Shift-ò. There&#039;s no key for the ù character, but you can write it using the dead accents (Shift-è and then u).&lt;br /&gt;
&lt;br /&gt;
== Temporary remap ==&lt;br /&gt;
&lt;br /&gt;
Keys can be also remapped temporarily by loading keymap to a file, edit&lt;br /&gt;
that file and then reload changed file to N900 X server; like this (on an X terminal):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xkbcomp :0&lt;br /&gt;
vi server-0.xkb&lt;br /&gt;
xkbcomp server-0.xkb :0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This has the advantage that if keymap get screwed out, running just &amp;lt;code&amp;gt;setxkbmap&amp;lt;/code&amp;gt; will fix it back to original. If this cannot be done, rebooting will fix things for sure.&lt;br /&gt;
&lt;br /&gt;
For arrow key remapping the following script can be handy:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Just noticed that this makes N900 drain battery !!! (N900 was shutdown in the morning). After executing this maemo-xinput-sounds takes &amp;gt;90% of cpu time. Killing the process will be a temporary fix; I&#039;ll look for better solution...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
set -eux&lt;br /&gt;
&lt;br /&gt;
# busybox mktemp is sooo strict: 6 X:s at the end is the only option...&lt;br /&gt;
tf=`mktemp xkb-XXXXXX`&lt;br /&gt;
trap &amp;quot;rm $tf.0 $tf&amp;quot; 0&lt;br /&gt;
&lt;br /&gt;
xkbcomp :0 $tf.0&lt;br /&gt;
&lt;br /&gt;
perl -pe &#039;&lt;br /&gt;
 sub out ($$$) {&lt;br /&gt;
        print qq(    key &amp;lt;$_[0]&amp;gt; { type[Group1] = &amp;quot;PC_FN_LEVEL2&amp;quot;,);&lt;br /&gt;
        print qq( symbols[Group1] = [ $_[1], $_[2] ] };);&lt;br /&gt;
        return if s/.*};//; while (&amp;lt;&amp;gt;) { last if s/.*};//; };&lt;br /&gt;
 }&lt;br /&gt;
 s/controls=\)/controls=SlowKeys\)/; # hmm...&lt;br /&gt;
 out &amp;quot;UP&amp;quot;, &amp;quot;Up&amp;quot;, &amp;quot;Odiaeresis&amp;quot; if (/key\s+&amp;lt;UP&amp;gt;/);&lt;br /&gt;
 out &amp;quot;DOWN&amp;quot;, &amp;quot;Down&amp;quot;, &amp;quot;adiaeresis&amp;quot; if (/key\s+&amp;lt;DOWN&amp;gt;/);&lt;br /&gt;
 out &amp;quot;LEFT&amp;quot;, &amp;quot;Left&amp;quot;, &amp;quot;odiaeresis&amp;quot; if (/key\s+&amp;lt;LEFT&amp;gt;/);&lt;br /&gt;
 out &amp;quot;RGHT&amp;quot;, &amp;quot;Right&amp;quot;, &amp;quot;Adiaeresis&amp;quot; if (/key\s+&amp;lt;RGHT&amp;gt;/);&lt;br /&gt;
&#039; $tf.0 &amp;gt; $tf&lt;br /&gt;
&lt;br /&gt;
xkbcomp $tf :0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one maps Up, Down, Left and Right to Ö, ä, ö, Ä, respectively (for finnish/scandinavian users), and is easy to tune for other purposes. Copy this as &amp;lt;code&amp;gt;xk&amp;lt;/code&amp;gt; to home directory on N900 and execute it as &amp;lt;code&amp;gt;sh xk&amp;lt;/code&amp;gt; whenever (seldom) you reboot N900.&lt;br /&gt;
&lt;br /&gt;
== Known Remap Bugs ==&lt;br /&gt;
&lt;br /&gt;
There are some programs that do not pick up remapped keys correctly. X-Terminal, for instance, picks up a tab that&#039;s been mapped to a shift+(key) combination as a shift+tab instead of just tab. MicroB did something similar as of this writing.&lt;br /&gt;
&lt;br /&gt;
As of this writing, FreOffice did not register a tab mapped to either fn+spacebar or shift+spacebar. Other keys for Tab worked fine.&lt;br /&gt;
&lt;br /&gt;
J-k and Z-X are two pairs of keys for which pressing shift+fn+(key) causes the typing of both that key&#039;s fourth-level mapped character, and the pair key&#039;s fourth level character. So, with default mappings, shift+fn+j types &amp;quot;)&amp;amp;&amp;quot;, as does &amp;quot;shift-fn-k&amp;quot;. So mapping those characters to separate keys at the fourth level is typically counter productive, though it could be useful for writing programs, scripts, or just mathematical expressions if you map [ to one and ] to the next one, or {}, (), or &amp;lt;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can delete one of the fourth-row key-maps from the keys in each pair, leaving it with only three characters (make sure to delete the last comma), and then both of those buttons will simply display the one key that&#039;s left.&lt;br /&gt;
&lt;br /&gt;
[[Category:Power users]]&lt;br /&gt;
[[Category:N900]]&lt;/div&gt;</summary>
		<author><name>146.201.180.200</name></author>
	</entry>
</feed>