|
|||||||
![]() |
|
|
LinkBack | Thread Tools | Display Modes |
10/19/2009, 10:25 AM
|
|
|
Developer
![]() ![]() Join Date: Apr 2003
Location: Adelaide, Australia - follow @webosinternals on Twitter visit www.webos-internals.org and www.facebook.com/webosinternals
Posts: 10,116
Likes: 464
Thanks: 90
Thanked 8,437 Times in 2,768 Posts
|
I have worked out how to permanently (but reversibly) change the token programmed into the Pre at manufacturing time which tells it which hardware keyboard layout the device has.
I have tested this technique on the German webOS 1.1.3 firmware flashed onto a Sprint CDMA Pre, and have been able to turn the normally qwerty keyboard into a qwertz or azerty mapping. The same technique will work on any Pre running any firmware version to convert any keyboard layout to any other keyboard layout. This technique persists across OTA webOS updates, and even persists across using Palm's official webOS Doctor. The technique is reversible by simply applying it again with a different value. Note that the technique requires you to completely erase the phone (just like the webOS Doctor does), but is not considered dangerous because it uses Palm's own webOS Doctor to perform the modification in a very controlled way. I'll post the technical details of the technique here tomorrow (it's past 1am here already, and I've been working on this for the last 6 hours straight). Note that it requires the use of the Meta-Doctor, with some manual modifications to various files in the middle of it's operation, and the resulting executable is not redistributable (cause it contains Palm files) so anyone who wants to do this must do the technique for themselves. In the future, it should be possible for someone to turn this into an end-user tool, and the information will be freely shareable for anyone to do so. It is in a very raw and linux-command-line-only state right now. If you want to show your thanks, please feel free to .The technique will be fully written up in this thread tomorrow irrespective of donations, since I do not believe in information being held to ransom. The kernel of the technique involves modifying the castle.xml file in the webOS Doctor to overwrite the KEYoBRD token when the doctor is used to reflash the Pre. -- Rod
__________________
WebOS Internals and Preware Founder and Developer You may wish to donate by Paypal to donations @ webos-internals.org if you find our work useful. All donations go back into development. www.webos-internals.org twitter.com/webosinternals facebook.com/webosinternals Last edited by rwhitby; 10/19/2009 at 10:31 PM. |
|
Thanked by
akabadnews, ashi, cecemf, chrisly, czechdev, c_man, Dick99999, Dieter Bohn, Edward Ng, frause, freakout, grappler, greg_roll, guedowar, hux, jcross22, Lildun101, MiDoJo, morgmel, nouabonshu, novakry, P356A, palmdoc2005, PalmoAnest, peabrain, phil71, robbskittles, Timtom, tomi666
|
10/19/2009, 10:49 AM
|
|
|
Developer
![]() ![]() Join Date: Apr 2003
Location: Adelaide, Australia - follow @webosinternals on Twitter visit www.webos-internals.org and www.facebook.com/webosinternals
Posts: 10,116
Likes: 464
Thanks: 90
Thanked 8,437 Times in 2,768 Posts
|
Due to such a generous act by PreCentral, I'm staying up even later to post some more info.
You need to change the KEYoBRD token to 'z' (qwerty), 'y' (qwertz) or 'w' (azerty). The easiest way to do this is to use the WebOS Internals Meta-Doctor (you can get that from git.webos-internals.org, and you need a Linux box on which to run it). Just run: "make CARRIER=wr unpack patch" Then modify build/.../webOS/castle.xml, adding the following line in the appropriate place: <Val name="KEYoBRD" action="overwrite" value="z"/> Then run: "make CARRIER=wr pack" and use the resulting doctor .jar file in build/... to reflash your Pre. -- Rod
__________________
WebOS Internals and Preware Founder and Developer You may wish to donate by Paypal to donations @ webos-internals.org if you find our work useful. All donations go back into development. www.webos-internals.org twitter.com/webosinternals facebook.com/webosinternals |
|
|
10/19/2009, 10:55 AM
|
#4 (permalink) | |
|
Member
![]() Join Date: Apr 2009
Location: London, UK
Posts: 392
Likes: 0
Thanks: 46
Thanked 28 Times in 26 Posts
|
This is fantastic news - well done Rod!!
I guess we'll now start seeing lots of people German Pre exports?? I would seriously consider importing one to the UK if this method is safe and tried & tested - seems to be the case! Quote:
...Rod, whenever you do get the chance, please write up the technique and steps in as simple terms as possible, some of us are not as technical as you may hope!EDIT: too late! ----------------------------------------------------------------1] I guess without a Linux box it is not possible to follow your steps? 2] I am hoping post #3 means something to someone!! - who can translate! |
|
|
|
10/19/2009, 10:58 AM
|
|
|
|
Developer
![]() ![]() Join Date: Apr 2003
Location: Adelaide, Australia - follow @webosinternals on Twitter visit www.webos-internals.org and www.facebook.com/webosinternals
Posts: 10,116
Likes: 464
Thanks: 90
Thanked 8,437 Times in 2,768 Posts
|
Quote:
-- Rod
__________________
WebOS Internals and Preware Founder and Developer You may wish to donate by Paypal to donations @ webos-internals.org if you find our work useful. All donations go back into development. www.webos-internals.org twitter.com/webosinternals facebook.com/webosinternals |
|
|
|
10/19/2009, 11:26 AM
|
|
|
Developer
![]() ![]() Join Date: Apr 2003
Location: Adelaide, Australia - follow @webosinternals on Twitter visit www.webos-internals.org and www.facebook.com/webosinternals
Posts: 10,116
Likes: 464
Thanks: 90
Thanked 8,437 Times in 2,768 Posts
|
Here is the full log of performing the meta-doctor operation:
First you clean out the directory from previous runs: [CODE]rwhitby@ubuntu:/srv/tools/meta-doctor$ make clobber rm -rf build [/code] Then you unpack and patch the doctor with the standard changes: [code] rwhitby@ubuntu:/srv/tools/meta-doctor$ make CARRIER=wr unpack patch rm -rf build/pre-p100eww-wr-1.1.3 mkdir -p build/pre-p100eww-wr-1.1.3 cp downloads/webosdoctorp100eww-wr-1.1.3.jar build/pre-p100eww-wr-1.1.3/webosdoctorp100eww-wr-1.1.3.jar ( cd build/pre-p100eww-wr-1.1.3 ; \ unzip webosdoctorp100eww-wr-1.1.3.jar META-INF/MANIFEST.MF resources/webOS.tar ) Archive: webosdoctorp100eww-wr-1.1.3.jar inflating: META-INF/MANIFEST.MF inflating: resources/webOS.tar mkdir -p build/pre-p100eww-wr-1.1.3/webOS tar -C build/pre-p100eww-wr-1.1.3/webOS \ -f build/pre-p100eww-wr-1.1.3/resources/webOS.tar \ -x ./nova-cust-image-castle.rootfs.tar.gz \ ./nova-installer-image-castle.uImage ./castle.xml ./installer.xml gunzip -f build/pre-p100eww-wr-1.1.3/webOS/nova-cust-image-castle.rootfs.tar.gz mkdir -p build/pre-p100eww-wr-1.1.3/rootfs tar -C build/pre-p100eww-wr-1.1.3/rootfs \ -f build/pre-p100eww-wr-1.1.3/webOS/nova-cust-image-castle.rootfs.tar \ -x ./usr/palm/applications/com.palm.app.firstuse ./usr/lib/ipkg/info ./md5sums touch build/pre-p100eww-wr-1.1.3/.unpacked rm -f build/pre-p100eww-wr-1.1.3/.patched mv build/pre-p100eww-wr-1.1.3/rootfs/md5sums build/pre-p100eww-wr-1.1.3/rootfs/md5sums.old [ -d patches/pre-p100eww-wr-1.1.3 ] ( cd patches/pre-p100eww-wr-1.1.3 ; cat com.palm.app.firstuse.patch ) | \ ( cd build/pre-p100eww-wr-1.1.3/rootfs ; patch -p0 ) patching file usr/palm/applications/com.palm.app.firstuse/app/controllers/app-assistant.js patching file usr/palm/applications/com.palm.app.firstuse/appinfo.json mkdir -p build/pre-p100eww-wr-1.1.3/rootfs/var/luna/preferences touch build/pre-p100eww-wr-1.1.3/rootfs/var/luna/preferences/ran-first-use mkdir -p build/pre-p100eww-wr-1.1.3/rootfs/var/gadget touch build/pre-p100eww-wr-1.1.3/rootfs/var/gadget/novacom_enabled for app in com.palm.app.firstuse ; do \ ( cd build/pre-p100eww-wr-1.1.3/rootfs ; \ find ./usr/palm/applications/$app -type f | xargs md5sum ) \ > build/pre-p100eww-wr-1.1.3/rootfs/usr/lib/ipkg/info/$app.md5sums.new ; \ ./scripts/replace-md5sums.py \ build/pre-p100eww-wr-1.1.3/rootfs/usr/lib/ipkg/info/$app.md5sums.old build/pre-p100eww-wr-1.1.3/rootfs/usr/lib/ipkg/info/$app.md5sums.new \ > build/pre-p100eww-wr-1.1.3/rootfs/usr/lib/ipkg/info/$app.md5sums ; \ rm -f build/pre-p100eww-wr-1.1.3/rootfs/usr/lib/ipkg/info/$app.md5sums.old build/pre-p100eww-wr-1.1.3/rootfs/usr/lib/ipkg/info/$app.md5sums.new ; \ done Overwriting md5sum for ./usr/palm/applications/com.palm.app.firstuse/appinfo.json Overwriting md5sum for ./usr/palm/applications/com.palm.app.firstuse/app/controllers/app-assistant.js ( cd build/pre-p100eww-wr-1.1.3/rootfs ; \ find ./usr/palm/applications/com.palm.app.firstuse ./usr/lib/ipkg/info -type f | xargs md5sum ) \ > build/pre-p100eww-wr-1.1.3/rootfs/md5sums.new ./scripts/replace-md5sums.py build/pre-p100eww-wr-1.1.3/rootfs/md5sums.old build/pre-p100eww-wr-1.1.3/rootfs/md5sums.new > \ build/pre-p100eww-wr-1.1.3/rootfs/md5sums Overwriting md5sum for ./usr/lib/ipkg/info/com.palm.app.firstuse.md5sums Overwriting md5sum for ./usr/palm/applications/com.palm.app.firstuse/appinfo.json Overwriting md5sum for ./usr/palm/applications/com.palm.app.firstuse/app/controllers/app-assistant.js rm -f build/pre-p100eww-wr-1.1.3/rootfs/md5sums.old build/pre-p100eww-wr-1.1.3/rootfs/md5sums.new sed -i.orig -e '/<Volume id="var"/s|256MB|2048MB|' build/pre-p100eww-wr-1.1.3/webOS/castle.xml rm -f build/pre-p100eww-wr-1.1.3/webOS/castle.xml.orig touch build/pre-p100eww-wr-1.1.3/.patched [/CODE] This is the point at which you edit the castle.xml file in build/pre-p00eww-we-1.1.3/webOS/castle.xml ... Then you pack the modified doctor ready for use: [code] rwhitby@ubuntu:/srv/tools/meta-doctor$ make CARRIER=wr pack rm -f build/pre-p100eww-wr-1.1.3/.packed tar -C build/pre-p100eww-wr-1.1.3/rootfs \ -f build/pre-p100eww-wr-1.1.3/webOS/nova-cust-image-castle.rootfs.tar \ --delete ./usr/palm/applications/com.palm.app.firstuse ./usr/lib/ipkg/info ./md5sums ( cd build/pre-p100eww-wr-1.1.3/rootfs ; mkdir -p ./usr/palm/applications/com.palm.app.firstuse ./usr/lib/ipkg/info ./var/luna/preferences ./var/gadget ) tar -C build/pre-p100eww-wr-1.1.3/rootfs \ -f build/pre-p100eww-wr-1.1.3/webOS/nova-cust-image-castle.rootfs.tar \ -r ./usr/palm/applications/com.palm.app.firstuse ./usr/lib/ipkg/info ./var/luna/preferences ./var/gadget ./md5sums gzip -f build/pre-p100eww-wr-1.1.3/webOS/nova-cust-image-castle.rootfs.tar tar -C build/pre-p100eww-wr-1.1.3/webOS \ -f build/pre-p100eww-wr-1.1.3/resources/webOS.tar \ --delete ./nova-cust-image-castle.rootfs.tar.gz ./castle.xml ./installer.xml tar -C build/pre-p100eww-wr-1.1.3/webOS \ -f build/pre-p100eww-wr-1.1.3/resources/webOS.tar \ -r ./nova-cust-image-castle.rootfs.tar.gz ./castle.xml ./installer.xml ( cd build/pre-p100eww-wr-1.1.3 ; \ zip -d webosdoctorp100eww-wr-1.1.3.jar META-INF/MANIFEST.MF META-INF/JARKEY.* resources/webOS.tar ) deleting: META-INF/MANIFEST.MF deleting: META-INF/JARKEY.SF deleting: META-INF/JARKEY.RSA deleting: resources/webOS.tar sed -i.orig -e '/^Name: /d' -e '/^SHA1-Digest: /d' -e '/^ /d' -e '/^\n$/d' \ build/pre-p100eww-wr-1.1.3/META-INF/MANIFEST.MF ( cd build/pre-p100eww-wr-1.1.3 ; \ zip webosdoctorp100eww-wr-1.1.3.jar META-INF/MANIFEST.MF resources/webOS.tar ) adding: META-INF/MANIFEST.MF (deflated 82%) adding: resources/webOS.tar (deflated 5%) touch build/pre-p100eww-wr-1.1.3/.packed rwhitby@ubuntu:/srv/tools/meta-doctor$ [/code] At this point, your modified doctor .jar file is in the build/pre-p100eww-we-1.1.3 directory. Note that this can be done for CARRIER=bellmo and CARRIER=sprint too (which will cause it to use the 1.2.1 doctor). -- Rod
__________________
WebOS Internals and Preware Founder and Developer You may wish to donate by Paypal to donations @ webos-internals.org if you find our work useful. All donations go back into development. www.webos-internals.org twitter.com/webosinternals facebook.com/webosinternals Last edited by rwhitby; 10/19/2009 at 05:38 PM. |
|
|
10/19/2009, 12:55 PM
|
#8 (permalink) | |
|
Member
![]() Join Date: Aug 2009
Posts: 92
Likes: 0
Thanks: 6
Thanked 29 Times in 18 Posts
|
Quote:
p.s. Will this gsm phone be usable in your neck of the woods or does it operate on different bands? I'd hate to see you get yet ANOTHER pre that you can't even fully use. Thanks again for all your hard work. |
|
|
Thanked By:
pegass
|
10/19/2009, 02:32 PM
|
#9 (permalink) |
|
Member
![]() Join Date: Oct 2009
Posts: 17
Likes: 0
Thanks: 2
Thanked 1 Time in 1 Post
|
rwhitby - big thank you for looking at this issue. That is amazing that there are ppl like you out there
![]() If you need help with purchasing German Pre, just say a word. I live in Germany and can help with logistics and/or activation. Pegass Last edited by pegass; 10/19/2009 at 02:40 PM. Reason: typoo |
|
|
10/19/2009, 02:58 PM
|
#10 (permalink) | |
|
Member
![]() Join Date: Apr 2009
Location: London, UK
Posts: 392
Likes: 0
Thanks: 46
Thanked 28 Times in 26 Posts
|
Quote:
Is any physical modification required, and if so, how easy would that be... If not, then post mapping, will pressing the 'y' key show up as a 'z' ? (assuming QWERTZ --> QWERTY conversion) |
|
|
|
10/19/2009, 04:48 PM
|
|
|
|
Developer
![]() ![]() Join Date: Apr 2003
Location: Adelaide, Australia - follow @webosinternals on Twitter visit www.webos-internals.org and www.facebook.com/webosinternals
Posts: 10,116
Likes: 464
Thanks: 90
Thanked 8,437 Times in 2,768 Posts
|
Quote:
Yes, once the token is changed, pressing the 'y' key on a german keyboard will show up as 'z'. -- Rod
__________________
WebOS Internals and Preware Founder and Developer You may wish to donate by Paypal to donations @ webos-internals.org if you find our work useful. All donations go back into development. www.webos-internals.org twitter.com/webosinternals facebook.com/webosinternals |
|
|
|
10/19/2009, 05:16 PM
|
#12 (permalink) |
|
Member
![]() Join Date: Oct 2009
Posts: 38
Likes: 0
Thanks: 2
Thanked 3 Times in 3 Posts
|
thanks Rod what you are doing is amazing
i personally dont mind the QWERTZ keyboard but if you guys are in need of someone to test i dont mind doing it at all i can recommend a good ebay seller for the pre in case you didnt find one. keep up the good work |
|
|
10/19/2009, 05:39 PM
|
|
|
|
Developer
![]() ![]() Join Date: Apr 2003
Location: Adelaide, Australia - follow @webosinternals on Twitter visit www.webos-internals.org and www.facebook.com/webosinternals
Posts: 10,116
Likes: 464
Thanks: 90
Thanked 8,437 Times in 2,768 Posts
|
Quote:
-- Rod
__________________
WebOS Internals and Preware Founder and Developer You may wish to donate by Paypal to donations @ webos-internals.org if you find our work useful. All donations go back into development. www.webos-internals.org twitter.com/webosinternals facebook.com/webosinternals |
|
|
|
10/19/2009, 05:41 PM
|
|
|
|
Developer
![]() ![]() Join Date: Apr 2003
Location: Adelaide, Australia - follow @webosinternals on Twitter visit www.webos-internals.org and www.facebook.com/webosinternals
Posts: 10,116
Likes: 464
Thanks: 90
Thanked 8,437 Times in 2,768 Posts
|
Quote:
-- Rod
__________________
WebOS Internals and Preware Founder and Developer You may wish to donate by Paypal to donations @ webos-internals.org if you find our work useful. All donations go back into development. www.webos-internals.org twitter.com/webosinternals facebook.com/webosinternals |
|
|
|
10/30/2009, 03:27 PM
|
#17 (permalink) |
|
Member
![]() Join Date: Sep 2009
Posts: 6
Likes: 0
Thanks: 0
Thanked 2 Times in 2 Posts
|
I have test it , with QWERTZ GSM pre... but it does not change the keyboard layout ...
are you mind to paste your build/.../webOS/castle.xml for me to test ? I worry I have incorrect place to add entry |
|
|
10/31/2009, 03:57 AM
|
#18 (permalink) |
|
Member
![]() Join Date: Sep 2009
Posts: 6
Likes: 0
Thanks: 0
Thanked 2 Times in 2 Posts
|
ok now ... this is my castle.xml
---------------- <?xml version="1.0" encoding="UTF-8"?> <!-- Installer Rules for Castle Hardware --> <TrenchCoat> <CPU type="OMAP34xx"/> <Flash type="mmc" alignment="524288" device="/dev/mmcblk0"> <Entry type="mbr" size="512" align="false"/> <Entry type="bootloader" size="192KB" file="${BOOTIE}"/> <Entry type="nvram" size="4MB"> <Section name="env" type="env" size="16KB"> <Val name="installer" value="trenchcoat"/> <Val name="autoboot" action="delete"/> <Val name="bootfile" action="delete"/> <Val name="KEYoBRD" action="overwrite" value="z"/> </Section> <Section name="tokens" type="token" size="4KB"> <Val name="installer" value="trenchcoat"/> <Val name="KEYoBRD" action="overwrite" value="z"/> </Section> <Section name="logo-boot" type="image" file="BootLogo.tga"/> <Section name="logo-chg" type="image" file="Charging.tga"/> <Section name="logo-badchg" type="image" file="NoPower.tga"/> <Section name="logo-nobatt" type="image" file="NoBatt.tga"/> <Section name="logo-badsys" type="image" file="BadSys.tga"/> <Section name="logo-nosys" type="image" file="NoSys.tga"/> <Section name="logo-sync" type="image" file="Sync.tga"/> <Section name="logo-panic" type="image" file="Panic.tga"/> <Section name="logo-disk" type="image" file="Disk.tga"/> </Entry> <Entry type="ext3" size="32MB" mount="/boot"/> <Entry type="lvm" id="pv" size="*" metadatasize="1532KB" metadatacopies="2"/> </Flash> <VolumeGroups> <Group name="store" pv="pv" physicalextentsize="8MB"> <Volume id="root" type="ext3" size="456MB" mount="/"/> <Volume id="var" type="ext3" size="2048MB" mount="/var"/> <Volume id="update" type="ext3" size="56MB" mount="/var/lib/update"/> <Volume id="log" type="ext3" size="40MB" mount="/var/log"/> <Volume id="media" type="fat32" size="*" mount="/media/internal"/> <Volume id="swap" size="128MB"/> </Group> </VolumeGroups> <Filesystem fstab="/etc/fstab"> <Mount device="rootfs" mount="/" type="ext3" options="ro,suid,dev,exec,auto,nouser,async,noatime" freq="1" passno="1"/> <Mount id="var" options="noatime" freq="0" passno="0"/> <Mount id="log" options="noatime" freq="0" passno="0"/> <Mount id="update" options="noauto,noatime" freq="0" passno="0"/> <Mount device="proc" mount="/proc" type="proc" options="defaults" freq="0" passno="0"/> <Mount device="devpts" mount="/dev/pts" type="devpts" options="mode=0620,gid=5" freq="0" passno="0"/> <Mount device="tmpfs" mount="/tmp" type="tmpfs" options="size=64M,mode=1777" freq="0" passno="0"/> <Mount device="tmpfs" mount="/media/ram" type="tmpfs" options="defaults" freq="0" passno="0"/> <Mount id="media" options="utf8,shortname=mixed" freq="0" passno="0"/> </Filesystem> <Images> <File file="${NOVATGZ}" target="/"/> </Images> <PostInstall file="/sbin/tcpostflash.sh"/> </TrenchCoat> |
|
|
10/31/2009, 07:01 AM
|
|
|
Developer
![]() ![]() Join Date: Apr 2003
Location: Adelaide, Australia - follow @webosinternals on Twitter visit www.webos-internals.org and www.facebook.com/webosinternals
Posts: 10,116
Likes: 464
Thanks: 90
Thanked 8,437 Times in 2,768 Posts
|
Remove the first red line, keep the second red line.
-- Rod
__________________
WebOS Internals and Preware Founder and Developer You may wish to donate by Paypal to donations @ webos-internals.org if you find our work useful. All donations go back into development. www.webos-internals.org twitter.com/webosinternals facebook.com/webosinternals |
|
|
11/06/2009, 05:52 AM
|
#20 (permalink) |
|
Member
![]() Join Date: Jun 2009
Posts: 20
Likes: 0
Thanks: 22
Thanked 1 Time in 1 Post
|
Firstly huge thanks to Rod for your great work... I am so impressed with this whole community!
Has anyone trialled this on an actual imported GSM QWERTZ and found that it worked? Would be great to hear your reports. Cheers. |
|
|
![]() |
| webOS Nation Forums How to permanently change the qwertz/azerty/qwerty keyboard mapping |
«
Previous Thread
|
Next Thread
»
| Thread Tools | |
| Display Modes | |
|
|













...Rod, whenever you do get the chance, please write up the technique and steps in as simple terms as possible, some of us are not as technical as you may hope!
too late! ----------------------------------------------------------------






Linear Mode









