As an alternative to XBMC on Crouton, I am pleased to report that SMPlayer (a front-end for MPlayer) seems to work very well and that the visual quality of the video displayed is second to none. My next candidate is VLC, primarily because I prefer multi-platform solutions. That way, I have some reason to expect that a file I'm building or testing on Linux will play similarly on Windows (or vice-versa).
Wednesday, May 22, 2013
Saturday, May 18, 2013
A Retraction
I sincerely regret that I must withdraw my enthusiastic endorsement of XBMC. Although I remain very fond of the software, further use has revealed that the visual quality of the video it displays is noticably inferior to that of other media players. I will admit that this difference may not be apparent to most people with most encoded video, but for me, it's a deal-breaker. I have no idea why this is the case but hope it gets resolved.
Tuesday, May 14, 2013
CrOS Media Playback
I got the bright idea to exploit all that HDD real estate on the C7 by loading it up with media files. Unfortunately, Chrome OS's local video playback failed to impress me. My testing was limited to the AVI & MP4 containers, standard definition video (DVD resolution) and mostly XviD & MP3, so other formats/codecs might fare differently. In addition, I readily admit to being an obsessive videophile, so my expectations are very high. In fairness to Google, I must also say that my opinion of Ubuntu's OOTB video playback is similar.
However, I can report that XBMC can be installed on Crouton and it works beautifully (at least for me)! I would expect other media players to perform well too, but haven't yet confirmed this myself.
However, I can report that XBMC can be installed on Crouton and it works beautifully (at least for me)! I would expect other media players to perform well too, but haven't yet confirmed this myself.
Sunday, March 17, 2013
Chromebook Tips, Tricks & Errata
1. If, like me, you ever choose to clone partitions from your SSD/HDD to external media and then boot from that media - you'll swear someone slipped a hallucinogen into your coffee! Be sure to complete the process by assigning the clone a new UUID like this:
2. To identify the current rootfs & kernel partitions:
3. Interestingly, the Acer C7 seems unable to boot from an SD card in the on-board card reader. I have successfully created bootable SD cards using the slot, but must move them to an external USB reader to boot from them. The only conclusion I can draw is that the firmware can only boot from a device connected via USB and that the card reader slot is, in fact, not USB.
4. To fix the erratic trackpad behavior in Ubuntu:
sudo gedit /usr/share/X11/xorg.conf.d/50-synaptics.conf
after MatchIsTouchPad "on" in the file, insert these lines:
Option "FingerLow" "4"
Option "FingerHigh" "10"
Reboot and the problem should be resolved. However, it's possible that a system upgrade (i.e. 12.04 to 12.10) may wipe out this change, so keep that in mind.
5. Another factor to consider regarding Linux Distros on Chromebooks is the version of kernel that the distro ships with. Since Google's current CrOS kernel is version 3.4.0, I've generally stuck to distros that included kernel 3.4.0 or earlier. While the CrOS kernel apparently incorporates some features of later kernels, for optimal compatibility, 3.4.0 seems like a good logical target.
Postscript - 05/30/13 - Just ran across this excellent explanation of the issue:
https://github.com/dnschneid/crouton/issues/129
I was merely speculating based on reasoning and experience.
$ sudo cgpt add -i 3 -u $(uuidgen) /dev/sdband avoid taking the trip to Wonderland all together.
___________________________________________________
2. To identify the current rootfs & kernel partitions:
$ rootdev -swill return the partition mounted as / like this:
/dev/sda#where # is 3, 5, or 7. So, just subtract 1 from # to identify the current kernel partition.
___________________________________________________
3. Interestingly, the Acer C7 seems unable to boot from an SD card in the on-board card reader. I have successfully created bootable SD cards using the slot, but must move them to an external USB reader to boot from them. The only conclusion I can draw is that the firmware can only boot from a device connected via USB and that the card reader slot is, in fact, not USB.
___________________________________________________
4. To fix the erratic trackpad behavior in Ubuntu:
sudo gedit /usr/share/X11/xorg.conf.d/50-synaptics.conf
after MatchIsTouchPad "on" in the file, insert these lines:
Option "FingerLow" "4"
Option "FingerHigh" "10"
Reboot and the problem should be resolved. However, it's possible that a system upgrade (i.e. 12.04 to 12.10) may wipe out this change, so keep that in mind.
___________________________________________________
5. Another factor to consider regarding Linux Distros on Chromebooks is the version of kernel that the distro ships with. Since Google's current CrOS kernel is version 3.4.0, I've generally stuck to distros that included kernel 3.4.0 or earlier. While the CrOS kernel apparently incorporates some features of later kernels, for optimal compatibility, 3.4.0 seems like a good logical target.
Postscript - 05/30/13 - Just ran across this excellent explanation of the issue:
https://github.com/dnschneid/crouton/issues/129
I was merely speculating based on reasoning and experience.
Saturday, March 9, 2013
Installation Method
[Edit] This method is now deprecated in favor of the USB Bootable Media Toolbox. This post remains for historical reference only. [08/31/13]
Here's a rather verbose & needlessly complex explanation of how I test Linux Distros on the Acer C7. However, I think it should work with any Chromebook capable of booting from USB, but might require modification in some cases. It is and will always be a "work-in-progress", so please let me know if something isn't clear.
2. Same Chromebook running Developer Firmware.
3. Same Chromebook with USB Boot enabled.
4. USB bootable media (thumb drive or SD card). From 4 - 16 GB will suffice. 16 GB will match the internal storage of every Chromebook prior to the Pixel, except for the Acer C7. So, you could duplicate your SSD for development purposes. See Tips #1 & #3 for relevant info.
cgpt create /dev/mmcblk0
cgpt show /dev/mmcblk0
start size part contents
0 1 PMBR
1 1 Pri GPT header
2 32 Pri GPT table
31537119 32 Sec GPT table
31537151 1 Sec GPT header
cgpt add /dev/mmcblk0 -i 6 -b 34 -s 32768 -t kernel -l KERN-C -P 1 -T 1
The size of partition #7 here is the beginning sector of "Sec GPT table" (31537119) MINUS the beginning sector of partition #7 (32802). Yes, the font is very tiny, but it preserves the appearance of the output.
cgpt add /dev/mmcblk0 -i 7 -b 32802 -s 31504317 -t rootfs -l ROOT-C
cgpt show /dev/mmcblk0
Please note that (at least on the C7) although you can use the built-in card reader to create such media, you may be unable to boot from it without an external USB card reader. At least, I haven't been able to. So, it may be more practical to simply use a thumb drive. See Tip #3 for a theory.
B. Create a debugging-enabled kernel from the current kernel, copy it to partition #6 and prioritize it to boot once. See Tip #2 for an explanation here.
rootdev -s
/dev/sda3
dd if=/dev/sda2 of=kernel_2.blob
dump_kernel_config kernel_2.blob > kernel_2.cfg
cp kernel_2.cfg kernel_debug.cfg
Now, replace the contents of kernel_debug.cfg with the following:
add_efi_memmap
boot=local
console=tty1
disablevmx=off
i915.modeset=1
init=/sbin/init
kern_guid=%U
loglevel=7
lsm.module_locking=0
rw
root=PARTUUID=%U/PARTNROFF=1
rootwait
tpm_tis.force=1
tpm_tis.interrupts=0
These are commandline arguments passed to the kernel, so they should only be separated by spaces. Here, I've alphabetized them on separate lines for clarity. Now, wrap the new kernel with the verified block and the new config:
vbutil_kernel --repack kernel_debug.blob \
--keyblock /usr/share/vboot/devkeys/kernel.keyblock \
--version 1 \
--signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk \
--config=kernel_debug.cfg \
--oldblob kernel_2.blob
Make sure the new kernel verifies OK and finally copy it to partition #6 and prioritize it.
vbutil_kernel --verify kernel_debug.blob
dd if=kernel_debug.blob of=/dev/mmcblk0p6
cgpt add /dev/mmcblk0 -i 6 -P 1 -T 1
C. Boot your chosen distro on another machine (real or virtual) and install it onto partition #7 of your bootable media. In some cases, you may need to create a filesystem on partition #7 prior to the installation, so I do just in case. I've used both Ext2 and Ext4 successfully. Either skip installing a bootloader or attempt to place the bootloader on partition #7. I assume the distro must support GPT disks in order for this to work.
D. Double check the GPT partition table for any changes that might prevent booting.
E. Copy the necessary stuff from the current Chrome OS rootfs to partition #7. Include the following complete folders:
/lib/firmware
/lib/modules
/usr/share/vboot
And these files as well:
/usr/bin/cgpt
/usr/bin/dump_kernel_config
/usr/bin/vbutil_*
Overkill perhaps, but handy for working on kernels from Linux too.
F. Cross your fingers, reboot & attempt to boot from USB. If it boots, reprioritize partition #6 and mark it as having booted successfully.
cgpt add /dev/sdb -i 6 -P 1 -T 0 -S 1
I adapted this method from the technique published by Olof Johannson, a member of the Chrome OS development team.
Here's a rather verbose & needlessly complex explanation of how I test Linux Distros on the Acer C7. However, I think it should work with any Chromebook capable of booting from USB, but might require modification in some cases. It is and will always be a "work-in-progress", so please let me know if something isn't clear.
Requirements
1. A Chromebook in "Developer Mode."2. Same Chromebook running Developer Firmware.
3. Same Chromebook with USB Boot enabled.
4. USB bootable media (thumb drive or SD card). From 4 - 16 GB will suffice. 16 GB will match the internal storage of every Chromebook prior to the Pixel, except for the Acer C7. So, you could duplicate your SSD for development purposes. See Tips #1 & #3 for relevant info.
The Method
A. From ChromeOS, use cgpt to create a GPT partition table on your media (I'm using a 16GB SD card in the reader slot), add a kernel partition #6 which is 16 MB in size, and add a rootfs partition #7 using the remaining space. Something like this:cgpt create /dev/mmcblk0
cgpt show /dev/mmcblk0
start size part contents
0 1 PMBR
1 1 Pri GPT header
2 32 Pri GPT table
31537119 32 Sec GPT table
31537151 1 Sec GPT header
cgpt add /dev/mmcblk0 -i 6 -b 34 -s 32768 -t kernel -l KERN-C -P 1 -T 1
The size of partition #7 here is the beginning sector of "Sec GPT table" (31537119) MINUS the beginning sector of partition #7 (32802). Yes, the font is very tiny, but it preserves the appearance of the output.
cgpt add /dev/mmcblk0 -i 7 -b 32802 -s 31504317 -t rootfs -l ROOT-C
cgpt show /dev/mmcblk0
start size part contents
0 1 PMBR
1 1 Pri GPT header
2 32 Pri GPT table
34 32768 6 Label: "KERN-C"
Type: ChromeOS kernel
UUID: B6BF18B8-5B01-384F-AA69-7AD61AB56646
Attr: priority=1 tries=1 successful=0
32802 31504317 7 Label: "ROOT-C"
Type: ChromeOS rootfs
UUID: F33BC249-4577-D94A-8B7B-5B13D68DE423
31537119 32 Sec GPT table
31537151 1 Sec GPT header
B. Create a debugging-enabled kernel from the current kernel, copy it to partition #6 and prioritize it to boot once. See Tip #2 for an explanation here.
rootdev -s
/dev/sda3
dd if=/dev/sda2 of=kernel_2.blob
dump_kernel_config kernel_2.blob > kernel_2.cfg
cp kernel_2.cfg kernel_debug.cfg
Now, replace the contents of kernel_debug.cfg with the following:
add_efi_memmap
boot=local
console=tty1
disablevmx=off
i915.modeset=1
init=/sbin/init
kern_guid=%U
loglevel=7
lsm.module_locking=0
rw
root=PARTUUID=%U/PARTNROFF=1
rootwait
tpm_tis.force=1
tpm_tis.interrupts=0
These are commandline arguments passed to the kernel, so they should only be separated by spaces. Here, I've alphabetized them on separate lines for clarity. Now, wrap the new kernel with the verified block and the new config:
vbutil_kernel --repack kernel_debug.blob \
--keyblock /usr/share/vboot/devkeys/kernel.keyblock \
--version 1 \
--signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk \
--config=kernel_debug.cfg \
--oldblob kernel_2.blob
Make sure the new kernel verifies OK and finally copy it to partition #6 and prioritize it.
vbutil_kernel --verify kernel_debug.blob
dd if=kernel_debug.blob of=/dev/mmcblk0p6
cgpt add /dev/mmcblk0 -i 6 -P 1 -T 1
C. Boot your chosen distro on another machine (real or virtual) and install it onto partition #7 of your bootable media. In some cases, you may need to create a filesystem on partition #7 prior to the installation, so I do just in case. I've used both Ext2 and Ext4 successfully. Either skip installing a bootloader or attempt to place the bootloader on partition #7. I assume the distro must support GPT disks in order for this to work.
D. Double check the GPT partition table for any changes that might prevent booting.
E. Copy the necessary stuff from the current Chrome OS rootfs to partition #7. Include the following complete folders:
/lib/firmware
/lib/modules
/usr/share/vboot
And these files as well:
/usr/bin/cgpt
/usr/bin/dump_kernel_config
/usr/bin/vbutil_*
Overkill perhaps, but handy for working on kernels from Linux too.
F. Cross your fingers, reboot & attempt to boot from USB. If it boots, reprioritize partition #6 and mark it as having booted successfully.
cgpt add /dev/sdb -i 6 -P 1 -T 0 -S 1
I adapted this method from the technique published by Olof Johannson, a member of the Chrome OS development team.
Labels:
Acer C7,
Bodhi Linux,
Chrome OS,
Chromebook,
CrOS,
Debian,
Fedora,
kernel,
Linux,
Linux Mint,
Ubuntu,
Zorin OS
Tuesday, February 26, 2013
A Beginning
Prior to the introduction of the Pixel, running Linux on a Chromebook has required using the Chrome OS [CrOS] kernel with another distro's root file system. As I understand it, Jay Lee, the developer of ChrUbuntu, recently switched from 32-bit (<=11.10) to 64-bit (>=12.04) Ubuntu which required him to substitute the Open Source Chromium OS kernel for the CrOS kernel distributed by Google. Numerous issues with ChrUbuntu and a general lack of support led me to wish that I could switch back to Google's official (and constantly evolving) 32-bit kernel for CrOS.
Based primarily on the belief that Chromebook users would be better off sticking with Google's current CrOS kernel, I began testing 32-bit x86 Linux distros on my Acer C7. So far, the results of my experiments have been encouraging - not only does 32 bit Ubuntu 12.04.1 run without issues but it seems that most distros with Debian and/or Ubuntu lineage do as well. Results with other distros have been mixed. One key factor seems to be the use of initrd, which the CrOS kernel apparently does not support. Keep in mind that I'm only reporting that these distros install and boot using my method because I did not test them extensively.
x86 Distros on the C7
Here, I'll attempt to document my method so that others can benefit. IMHO, the distros I've highlighted represent the best match for the C7's hardware and resources.
In the meantime, I highly recommend checking out the Crouton script method developed by David Schneider. It essentially enables you to run Ubuntu as an application on CrOS. Credit for this find goes to Craig Errington.
Based primarily on the belief that Chromebook users would be better off sticking with Google's current CrOS kernel, I began testing 32-bit x86 Linux distros on my Acer C7. So far, the results of my experiments have been encouraging - not only does 32 bit Ubuntu 12.04.1 run without issues but it seems that most distros with Debian and/or Ubuntu lineage do as well. Results with other distros have been mixed. One key factor seems to be the use of initrd, which the CrOS kernel apparently does not support. Keep in mind that I'm only reporting that these distros install and boot using my method because I did not test them extensively.
x86 Distros on the C7
Here, I'll attempt to document my method so that others can benefit. IMHO, the distros I've highlighted represent the best match for the C7's hardware and resources.
In the meantime, I highly recommend checking out the Crouton script method developed by David Schneider. It essentially enables you to run Ubuntu as an application on CrOS. Credit for this find goes to Craig Errington.
Subscribe to:
Posts (Atom)