Sunday, 8 March 2015
Asus Transformer TX201 - Android + Ubuntu 14.10 Linux
GOODER:
2 computers in 1. Keyboard is a dual core i5 and tablet is an intel Z2560 (x86)
#Android and 8 and and whatever else you can install on a x86 PC.
Using android you don't need a cable.
Once you manage to boot from USB, 14.10 is trivial to install.
UPDATE: I upgraded kernel to 3.18 and then 3.19.
Fast switching between Android and Linux (or Windows). Both run at same time or you can shut down one and use other.
Chargers are small and well designed Asus plug-packs - not bricks.
Easy to open Keyboard to change HDD.
Under Linux, everything seems to work. Screen brightness is not working properly, but it does work.
UPDATE: Thanks to Viktar Vaŭčkievič and #ArchLinux, I compiled and installed an ALS module which automatically adjusts screen backlight. See https://github.com/victorenator/als.git
Running linux in mode.
GOOD:
11.6" screen. Could be an inch bigger based on bezel.
Tablet and keyboard have WiFi and Bluetooth.
Tablet is possible. http://forum.xda-developers.com/showpost.php?p=57341475&postcount=27
SD card on tablet mounts in Windows/Linux. But Ubuntu keeps opening a file manager every time I switch back from Android.
UPDATE: Fixed by Control Panel - Details - Removable Media - Tick 'Never prompt or start programs on media insertion'
Linux kernel modules to support device.
Aluminium tablet and keyboard backs.
BAD:
Matt screen might be better.
No 3G or LTE.
Can not connect 3G modem to tablet (so far).
No Android update from Asus.
No keyboard backlight nor fluorescent key labels.
When screen is open, tablet/screen hinge opens lower than base of keyboard which makes it uncomfortable as a lap-top.
A bit heavy for it's size at 1.7 kg (tablet and keyboard)
Only 2.4GHz WiFi.
UPDATE: But syslog indicates PC might support 5 GHz.
Rear camera does not work on PC.
WiFi (RTL8821) occasionally locks-up. To fix, remove module, put keyboard to sleep (Fn+f2), wake (power button) and load module. Module is rtl8821ae in my case.
UPDATE: This only seems to happen (now) when I tether to an iPhone 5s.
UPDATE: #ArchLinux also had a solution to this - too early for me to confirm that it is fixed. Does not seem to fix.
Thursday, 3 July 2014
Howto install OpenWRT on Netgear DG834 or DG834G (v1 or v2)
This assume you are running Ubuntu.
Try this:
My Script
# Factory default router
# Power on. Hold in reset button until test light (tick) turns on.
# Setup PC ethernet interface use DHCP. Disconnect. Connect - should get 192.168.0.2?
# router should be 192.168.0.1
# test by pointing browser to 192.168.0.1 - should get Netgear Setup Wizard screen
# route del default
#
# info stuff here
# MTDx partitions using 3.??.32? - seems to have 5 mtdx
# mtd0 0x900d0000,0x903e0000 ROOTFS
# mtd1 0x90020000,0x900d0000 Kernel
# mtd2 0x90000000,0x90020000 ADAM2
# mtd3 0x903e0000,0x903f0000 Probably Netgear firmware config
# mtd4 0x903f0000,0x90400000 Probably ADAM2 config
# Ordered
# mtd2 0x90000000,0x90020000 ADAM2
# mtd1 0x90020000,0x900d0000 Kernel
# mtd0 0x900d0000,0x903e0000 ROOTFS
# mtd3 0x903e0000,0x903f0000 Probably Netgear firmware config
# mtd4 0x903f0000,0x90400000 Prob. ADAM2 config
echo "Install needed packages..."
sudo apt-get install wget
sudo apt-get install expect
sudo apt-get install mini-httpd
echo "Get openwrt image - this is for mtd0 and mtd1 so it needs to be split..."
which wget || { echo "ERROR: wget not installed"; exit 1; }
OPENWRT="openwrt-ar7-squashfs.bin"
[[ -f ${OPENWRT} ]] \
|| wget "http://downloads.openwrt.org/backfire/10.03.1/ar7/${OPENWRT}"
echo "Configure this script..."
# ip address of router - should be 192.168.0.1 after factory reboot
ROUTER="192.168.0.1"
# ip address on this host - should not need to change
HOST="192.168.0.10"
# port on this host that has ethernet cable to router plugged in - should be same
ETH="eth0"
echo "Configure this script (ROUTER, HOST, and ETH) variables."
echo "Disconnect from all other networks."
echo "Next time you run this it will reconfigure your ETH port and "
echo "connect to your router."
echo
echo "If you have configured variables correctly, comment out next line."
exit 0
echo "Split OpenWRT image file..."
OPEN0="ow-mtd0.bin"
OPEN1="ow-mtd1.bin"
which dd || { echo "ERROR: dd not installed"; exit 1; }
dd if=${OPENWRT} of=${OPEN1} count=720896 bs=1
dd if=${OPENWRT} of=${OPEN0} skip=720896 bs=1
echo "Reconfigure ETH port..."
which ifconfig || { echo "ERROR: ifconfig not installed"; exit 1; }
sudo ifconfig ${ETH} ${HOST} netmask 255.255.255.0
echo "Turn on telnet - assumes your reouter has been factory defaulted..."
LOGIN="--user=admin --password=password"
wget -v -O debug.log ${LOGIN} "http://${ROUTER}/setup.cgi?todo=debug"
echo "Telnet to router, and do some heavy stuff - but nothing dangerous...yet..."
# Assign an IP address to ADAM2 (patch)
# Backup each MTD Block to RAM
# Spawn a HTTP Daemon to download MTD Backups
which expect || { echo "ERROR: expect not installed"; exit 1; }
which telnet || { echo "ERROR: telnet not installed"; exit 1; }
expect >telnet.log <
set timeout 30
set send_human {.1 .3 1 .05 2}
spawn telnet ${ROUTER}; expect "# "; sleep 1;
send_error "Telnet script\n";
send -h "cat /proc/sys/dev/adam2/environment | grep -v \"^my\" > /proc/sys/dev/adam2/environment\r";
expect "# "; sleep 1;
send -h "echo \"my_ipaddress ${ROUTER}\" > /proc/sys/dev/adam2/environment\r";
expect "# "; sleep 1;
send_error "Cat environment file...\n";
send -h "cat /proc/sys/dev/adam2/environment\r"; expect "# "; sleep 1;
send_error "Copy partitions to tmp...\n";
send -h "dd if=/dev/mtdblock/0 of=/tmp/mtd0.bin\r"; expect "# "; sleep 1;
send -h "dd if=/dev/mtdblock/1 of=/tmp/mtd1.bin\r"; expect "# "; sleep 1;
send -h "dd if=/dev/mtdblock/2 of=/tmp/mtd2.bin\r"; expect "# "; sleep 1;
send -h "dd if=/dev/mtdblock/3 of=/tmp/mtd3.bin\r"; expect "# "; sleep 1;
send -h "dd if=/dev/mtdblock/4 of=/tmp/mtd4.bin\r"; expect "# "; sleep 1;
send_error "Copy environment file...\n";
send -h "cat /proc/sys/dev/adam2/environment > /tmp/environment.bak\r"; expect "# "; sleep 1;
send -h "cd /tmp\r"; expect "# "; sleep 1;
send_error "Start web server...\n";send -h "mini_httpd -p 1080\r"; expect "# "; sleep 1;
send -h "exit\r";
EOF
echo "Pull files from router..."
wget ${LOGIN} -O mtd0.bin "http://${ROUTER}:1080/mtd0.bin"
wget ${LOGIN} -O mtd1.bin "http://${ROUTER}:1080/mtd1.bin"
wget ${LOGIN} -O mtd2.bin "http://${ROUTER}:1080/mtd2.bin"
wget ${LOGIN} -O mtd3.bin "http://${ROUTER}:1080/mtd3.bin"
wget ${LOGIN} -O mtd4.bin "http://${ROUTER}:1080/mtd4.bin"
wget ${LOGIN} -O environment.bak "http://${ROUTER}:1080/environment.bak"
echo "See if correct ADAM2 versio is installed..."
which grep || { echo "ERROR: grep not installed"; exit 1; }
grep "bootloaderVersion.*0.18.01" environment.bak \
|| { echo "HALT: Boot loader version is not 0.18.01"; exit 1; }
echo "See if ADAM2 is already patched..."
ADAM2NEW="mtd2.bin.new"
which md5sum || { echo "ERROR: md5sum not installed"; exit 1; }
MDS2=$( md5sum mtd2.bin | cut -d' ' -f1 )
if [[ "$MDS2" == "d8a2f4623bf6f64b7427812f0e849aa7" ]]; then
echo "mtd2.bin already patched"
cp mtd2.bin ${ADAM2NEW}
else
echo "mtd2.bin not patched"
echo "Verify ADAM2 file..."
MDS=$( md5sum mtd2.bin | cut -d' ' -f1 )
if [[ "$MDS" != "0530bfdf00ec155f4182afd70da028c1" ]]; then
echo "HALT: ADAM2 (mtd2.bin) MD5 sum does not match"
exit 1
fi
echo "Patch ADAM2..."
cp mtd2.bin ${ADAM2NEW}
printf '\x00\x00\x00\x00' | dd of=${ADAM2NEW} bs=1 seek=14660 count=4 conv=notrunc
echo "Verify patched ADAM2..."
MDS2=$( md5sum ${ADAM2NEW} | cut -d' ' -f1 )
if [[ "$MDS2" != "d8a2f4623bf6f64b7427812f0e849aa7" ]]; then
echo "HALT: Modified ADAM2 (${ADAM2NEW}) MD5 sum does not match"
exit 1
fi
fi
echo "Kill off any legacy http servers (if we have somehow left them running)..."
killall mini-httpd
echo "Start local web server..."
sudo mini-httpd -p 8000 || { echo "ERROR: mini-httpd did not start"; exit 1; }
echo "Download modified ADAM2 and OpenWRT files to router and install them..."
expect >flash.log <
set timeout 30
set send_human {.1 .3 1 .05 2}
spawn telnet ${ROUTER}; expect "# "; sleep 1;
send_error "Telnet script to install modified ${ADAM2NEW}\n";
send -h "cd /tmp\r"; expect "# "; sleep 1;
send -h "rm mtd0.bin\r"; expect "# "; sleep 1;
send -h "rm mtd1.bin\r"; expect "# "; sleep 1;
send -h "rm mtd2.bin\r"; expect "# "; sleep 1;
send -h "rm mtd3.bin\r"; expect "# "; sleep 1;
send -h "rm mtd4.bin\r"; expect "# "; sleep 1;
send -h "rm ${ADAM2NEW}\r"; expect "# "; sleep 1;
send_error "Download modified ${ADAM2NEW} from ${HOST}...\n";
send -h "wget http://${HOST}:8000/${ADAM2NEW}\r"; expect "# "; sleep 10;
send -h "dd if=${ADAM2NEW} bs=1 skip=110747 count=5\r";
expect {
"DG834" { send_error "GOOD: ${ADAM2NEW} contains DG834 string\n"; };
timeout { send_error "ERROR: TIMEOUT: Did not get DG834\n"; exit; };
"# " { send_error "ERROR: Got prompt instead of DG834\n"; exit; };
}
sleep 1;
send_error "Install modified ${ADAM2NEW}...\n";
send -h "dd if=${ADAM2NEW} of=/dev/mtdblock/2\r"; expect "# "; sleep 20;
send -h "rm ${ADAM2NEW}\r"; expect "# "; sleep 1;
send -h "rm ${OPEN0}\r"; expect "# "; sleep 1;
send_error "Download ${OPEN0} from ${HOST}...\n";
send -h "wget http://${HOST}:8000/${OPEN0}\r"; expect "# "; sleep 10;
send_error "Install ${OPEN0}...\n";
send -h "dd if=${OPEN0} of=/dev/mtdblock/0\r"; expect "# "; sleep 20;
send -h "rm ${OPEN0}\r"; expect "# "; sleep 1;
send -h "rm ${OPEN1}\r"; expect "# "; sleep 1;
send_error "Download ${OPEN1} from ${HOST}...\n";
send -h "wget http://${HOST}:8000/${OPEN1}\r"; expect "# "; sleep 10;
send_error "Install ${OPEN1}...\n";
send -h "dd if=${OPEN1} of=/dev/mtdblock/1\r"; expect "# "; sleep 20;
send -h "rm ${OPEN1}\r"; expect "# "; sleep 1;
send -h "reboot\r";
EOF
echo "Shutdown local web server..."
killall mini-httpd
echo "All done."
echo
echo "Power cycle router."
echo "Reconnect ethernet interface - may take 1-2 minutes"
echo "Browse to http://192.168.1.1"
exit 0
Basic Configuration Steps
Sunday, 12 January 2014
Virtualize an old Windows XP disk partition (howto convert disk partition to virtual disk for VirtualBox)
Turns out there was nothing, but it was in interesting exercise in converting a single disk partition into a VM - something that is not trivial.
I plugged my old drive into a USB hard disk docking station and had a look. It contained Windows XP and Linux from an old PC dating from 2004-2007 I believe.
"Hey!" I thought. I could virtualize this for no good reason and show how easy it is using free and open source software.
Ubuntu Packages
Create VirtualBox VM
- Select New
- Name your VM (say TEST)
- Select Windows and Windows XP
- Set memory size (default is ok)
- Select 'do not add a virtual hard drive' - we will create this later in tis VM's directory.
Create Virtual Disk Drive
#!/bin/bash
DISK=/dev/sdd
PART=1
printf "Copy boot sector image...\n"
sudo dd if=$DISK of=mbr.img bs=512 count=1 || { printf "FAILED\n"; exit 1; }
printf "Done\n"
# put 'normal' mbr incase grub or something was used
printf "Replace MBR code..."
sudo install-mbr mbr.img -t 36 || { printf "FAILED\n"; exit 1; }
printf "Done\n"
printf "Copy disk (%s) partition %d...(at 10MB/s 1GB will take 100s)...\n" "$DISK" $PART
PARTIMG=part${PART}.img
sudo dd if=${DISK}${PART} of=$PARTIMG bs=512 || { printf "FAILED\n"; exit 1; }
sudo chown $USER:$USER $PARTIMG
printf "Done\n"
printf "Make VirtualBox VMDK image with MBR...\n"sudo VBoxManage internalcommands createrawvmdk -filename ./disk.vmdk -rawdisk $DISK -partitions $PART -mbr ./mbr.img || { printf "FAILED\n"; exit 1; }
# VB needs this owned by user
sudo chown $USER:$USER disk-pt.vmdkprintf "Done\n"
# switch to partition image and zero starting offset
# eg.
# from this: RW 8514387 FLAT "/dev/sdd" 63
# to this: RW 8514387 FLAT "/home/phil/Development/pc-part2disk/part1.img" 0
printf "Modify VMDK files to use disk partition image...\n"
sudo cat disk.vmdk | sed "s@\"$DISK.*@\"./$PARTIMG\" 0@" > diskimage.vmdk
sudo chown $USER:$USER diskimage.vmdk
printf "Done\n"
# remove VB vmdk that points to physical drive - no longer required
sudo rm disk.vmdk
exit 0
Also, run chmod +x
Run my script.
It may take a while if you have budget hardware and a USB connected hard drive.
You will get some output like this:
phil@del:~/VirtualBox VMs/test$ ~/Development/pc-part2disk/pc-part2disk.bash
Copy boot sector image...
[sudo] password for phil:
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.00106311 s, 482 kB/s
Done
Replace MBR code...Done
Copy disk (/dev/sdd) partition 1...(at 10MB/s 1GB will take 100s)...
8514387+0 records in
8514387+0 records out
4359366144 bytes (4.4 GB) copied, 292.02 s, 14.9 MB/s
Done
Make VirtualBox VMDK image with MBR...
RAW host disk access VMDK file ./disk.vmdk created successfully.
Done
Modify VMDK files to use disk partition image...
Done
If you ls -la, you should see some new files:
phil@del:~/VirtualBox VMs/test$ ls -la
total 4257296
drwxr-xr-x 2 phil phil 4096 Jan 12 17:41 .
drwxr-xr-x 6 phil phil 4096 Jan 12 17:30 ..
-rw-r--r-- 1 phil phil 650 Jan 12 17:41 diskimage.vmdk
-rw------- 1 phil phil 64512 Jan 12 17:41 disk-pt.vmdk
-rw-r--r-- 1 root root 512 Jan 12 17:36 mbr.img
-rw-r--r-- 1 phil phil 4359366144 Jan 12 17:41 part1.img
-rw------- 1 phil phil 6190 Jan 12 17:32 test.vbox
-rw------- 1 phil phil 6087 Jan 12 17:32 test.vbox-prev
- test* files are you VB VM config files.
- mbr.img is your virtual disk MBR (probably not needed anymore).
- partX.img is an image of your windows (in this case) partition.
- disk-pt.vmdk seems to be your new MBR, partition table and possibly 60-odd sectors pulled from your hard disk.
- diskimage.vmdk is a vmdk definition file that makes a virtual hard drive from all these bits.
Add Virtual Disk Drive to VM
- Edit settings on your VM again.
- Under Storage, select your IDE controller, and add and attachment.
- Add a hard disk and select 'choose and existing disk'
- Select your diskimage.vmdk file.
- Power on your VM.
It will eventually display MBR (and possibly some characters) but after 2 seconds it should start booting your Windows XP VM.
For me, once I clicked into VM's window, it took XP about 2 minutes to workout how to use my keyboard and mouse so you need to wait.
Later you can install VB guest additions and things should work better.
Saturday, 15 June 2013
Howto enable AHCI Mode MacBookPro1,2 and MacBookPro4,1
setpci -s 0:1f.2 90.b=40
This sets Intel ICH7 (page 509) or ICH8 (page 486) controller into AHCI mode.
A similar command will probably work for other ICHx devices.
I got my bus:slot.function from running lspci - take value from line that states SATA IDE mode
eg.
00:1f.2 SATA controller: Intel Corporation 82801GBM/GHM (ICH7-M Family) SATA Controller [IDE mode] (rev 02)
Both MBP1,2 and MBP4,1 have same bus:slot.function and use same value (40h) to put controller into AHCI mode.
UPDATE: Should be MacBookPro1,2 not MacBookPro2,1
Monday, 3 June 2013
Root Huawei X3 8150 Without Windows or a Working Touchscreen
Some phone modes
Enter FASTBOOT Mode
Disconnect USB.Power-off phone.
RED+VOL-DN+POWER - hold for about 5 seconds. Phone will vibrate and show a white screen with IDEOS displayed.
Connect USB.
Enter RECOVERY Mode
Disconnect USB.Power-off phone.
GREEN+VOL-UP+POWER - hold for about 5 seconds. Phone will vibrate, show a white screen with IDEOS displayed and then show Recovery menu.
Connect USB.
Enter DOWNLOAD mode
Disconnect USB.Power-off phone.
RED+GREEN+POWER - hold for a few seconds until screen turns pink/magenta.
Connect USB.
Replace Stock Recovery with ClockWork Recovery
Install Android SDKFrom ubuntu this is very easy now:
apt-get install android-tools-adb
apt-get install android-tools-fastboot
Open root terminal or open terminal and sudo su.
Check that all is well, that USB connection is working and that ADB is correctly installed
Enter RECOVERY mode
Phone should boot into 'Android system recovery'
# adb devices
List of devices attached
308730C82377 recovery
Enter FASTBOOT mode
# fastboot erase recovery
erasing 'recovery'...
OKAY [ 0.033s]
finished. total time: 0.033s
update secure set value=1 where name='adb_enabled';
#!/bin/bash adb_sendevent(){ local -i _a=$1 _k=$2 _v=$3 printf "$FUNCNAME: _a=%d _k=%d _v=%d\n" $_a $_k $_v adb shell sendevent "/dev/input/event2" $_a $_k $_v } adb_touch1(){ local -i _a=$1 _x=$2 _y=$3 _w=$4 #printf "$FUNCNAME: _a=%d _x=%d _y=%d _w=%d\n" $_a $_x $_y $_w # send touch event x y adb_sendevent 3 0x39 $_a # start event? adb_sendevent 3 0x35 $_x adb_sendevent 3 0x36 $_y adb_sendevent 3 0x30 $_w # finger width? adb_sendevent 3 0x31 0 # x moved? adb_sendevent 3 0x34 0 adb_sendevent 3 0x32 0 # y moved? adb_sendevent 0 0x02 0 # end event? } adb_touch(){ local -i _x=$1 _y=$2 _w=$3 #adb_sendevent 0 0 0 adb_touch1 0 $_x $_y $_w adb_touch1 1 0 0x15b 0 adb_sendevent 0 0 0 } adb_tap(){ local -i _x=$1 _y=$2 adb_touch $_x $_y 0x20 # android icon selected adb_touch $_x $_y 0 } #0 --> "KEYCODE_UNKNOWN" #1 --> "KEYCODE_MENU" #2 --> "KEYCODE_SOFT_RIGHT" #3 --> "KEYCODE_HOME" #4 --> "KEYCODE_BACK" #5 --> "KEYCODE_CALL" #6 --> "KEYCODE_ENDCALL" #7 --> "KEYCODE_0" #8 --> "KEYCODE_1" #9 --> "KEYCODE_2" #10 --> "KEYCODE_3" #11 --> "KEYCODE_4" #12 --> "KEYCODE_5" #13 --> "KEYCODE_6" #14 --> "KEYCODE_7" #15 --> "KEYCODE_8" #16 --> "KEYCODE_9" #17 --> "KEYCODE_STAR" #18 --> "KEYCODE_POUND" #19 --> "KEYCODE_DPAD_UP" #20 --> "KEYCODE_DPAD_DOWN" #21 --> "KEYCODE_DPAD_LEFT" #22 --> "KEYCODE_DPAD_RIGHT" #23 --> "KEYCODE_DPAD_CENTER" #24 --> "KEYCODE_VOLUME_UP" #25 --> "KEYCODE_VOLUME_DOWN" #26 --> "KEYCODE_POWER" #27 --> "KEYCODE_CAMERA" #28 --> "KEYCODE_CLEAR" #29 --> "KEYCODE_A" #30 --> "KEYCODE_B" #31 --> "KEYCODE_C" #32 --> "KEYCODE_D" #33 --> "KEYCODE_E" #34 --> "KEYCODE_F" #35 --> "KEYCODE_G" #36 --> "KEYCODE_H" #37 --> "KEYCODE_I" #38 --> "KEYCODE_J" #39 --> "KEYCODE_K" #40 --> "KEYCODE_L" #41 --> "KEYCODE_M" #42 --> "KEYCODE_N" #43 --> "KEYCODE_O" #44 --> "KEYCODE_P" #45 --> "KEYCODE_Q" #46 --> "KEYCODE_R" #47 --> "KEYCODE_S" #48 --> "KEYCODE_T" #49 --> "KEYCODE_U" #50 --> "KEYCODE_V" #51 --> "KEYCODE_W" #52 --> "KEYCODE_X" #53 --> "KEYCODE_Y" #54 --> "KEYCODE_Z" #55 --> "KEYCODE_COMMA" #56 --> "KEYCODE_PERIOD" #57 --> "KEYCODE_ALT_LEFT" #58 --> "KEYCODE_ALT_RIGHT" #59 --> "KEYCODE_SHIFT_LEFT" #60 --> "KEYCODE_SHIFT_RIGHT" #61 --> "KEYCODE_TAB" #62 --> "KEYCODE_SPACE" #63 --> "KEYCODE_SYM" #64 --> "KEYCODE_EXPLORER" #65 --> "KEYCODE_ENVELOPE" #66 --> "KEYCODE_ENTER" #67 --> "KEYCODE_DEL" #68 --> "KEYCODE_GRAVE" #69 --> "KEYCODE_MINUS" #70 --> "KEYCODE_EQUALS" #71 --> "KEYCODE_LEFT_BRACKET" #72 --> "KEYCODE_RIGHT_BRACKET" #73 --> "KEYCODE_BACKSLASH" #74 --> "KEYCODE_SEMICOLON" #75 --> "KEYCODE_APOSTROPHE" #76 --> "KEYCODE_SLASH" #77 --> "KEYCODE_AT" #78 --> "KEYCODE_NUM" #79 --> "KEYCODE_HEADSETHOOK" #80 --> "KEYCODE_FOCUS" #81 --> "KEYCODE_PLUS" #82 --> "KEYCODE_MENU" #83 --> "KEYCODE_NOTIFICATION" #84 --> "KEYCODE_SEARCH" #85 --> "TAG_LAST_KEYCODE" adb_tap 0x70 0x80 # tap on android icon adb shell input keyevent 20 # down to 'Create' adb shell input keyevent 20 # down to 'Sign in' adb shell input keyevent 23 # enter adb shell input text 'username@gmail.com' adb shell input keyevent 20 # down to 'password' adb shell input text 'password or 2-factor code' # 2-factor pw adb shell input keyevent 23 # enter adb shell input keyevent 20 # down to 'Sign in' adb shell input keyevent 23 # enter
My phone is now setup and working.
Now to setup WiFi.
Friday, 31 May 2013
Install Lubuntu 13.04 on PowerBook G4 17" (REV D? 2005)
http://cdimage.ubuntu.com/lubuntu/releases/raring/release/lubuntu-13.04-desktop-powerpc.iso
Boot ISO (Option-C) when power on or 'c' if yaboot is already installed.
At the boot: prompt type:
live video=radeonfb:1024x768-32@60
https://help.ubuntu.com/community/Lubuntu/Documentation/FAQ/PPC
Install!