advice for buying a laptop

Matthias Apitz guru at
Sat Jun 11 06:21:26 UTC 2016

El día Friday, June 10, 2016 a las 07:09:13PM -0500, Don Harper escribió:

> Matthias,
> I am not sure of the other poster has a question, but I was wondering if 
> you ever got suspend/resume working on your C720?  If so, can you point 
> me to some docs or give a quick write-up on where to go look?

As I said to Byung-Hee HWANG (황병희), I own two of these devices and
support one more used by some customer. All of them run a r292778 and
ports compiled with poudriere. I started in January 2015 with this and
followed Michael's blog post here:
I think, he was the first making patches (now in head) to support this
device and he gave me a lot of help too. I'm attaching my step-by-step
guide which explains how to tweak the Chromebook to support FreeBSD
boot, how to make a USB key etc.

Suspend until now is not working, at least not in the kernel I'm using.
I will update it soon to a today's head to see how far the support for Haswell
chips is.


Matthias Apitz, ✉ guru at, ⌂  ☎ +49-176-38902045
"Die Verkaufsschlager des Buchmarkts geben Auskunft über den Zustand einer Gesellschaft bzw.
sind, was diese Zeiten angeht, Gradmesser fortschreitenden Schwachsinns. ..." (jW 19.05.2016)
-------------- next part --------------

$Id: install-acer-c720-amd64.txt,v 1.6 2015/08/02 06:35:53 guru Exp $

Preparing an USB boot key for AMD64 Installation of the Acer C720 Chromebook
             Matthias Apitz <guru at>

Version for r285885, August 2015 (20150805)

1. Prepare a bootable USB key from a recent CURRENT, mine was r285885 (July 26)

   # mkdir -p /usr/local/r285885/
   # cd /usr/local/r285885/
   # svn co svn:// src

   Using before /home/guru/r... was a big mistake, because this way the compiled .depend
   files contain references to /usr/home/... and to /home/...  files, which will not
   work if /home does not exist as a sym link to usr/home.  Better is using some top
   level dir belwow /usr/local/.... to avoid this problem.

   # cd /usr/local/r285885/src
   # mkdir /usr/local/r285885/obj
   # MAKEOBJDIRPREFIX=/usr/local/r285885/obj
   # make buildworld
   # make buildkernel

   Install world and kernel into a directory /usr/local/r285885/root.r285885:

   # MAKEOBJDIRPREFIX=/usr/local/r285885/obj
   # cd /usr/local/r285885
   # test -d root.r285885 && chflags -R noschg root.r285885
   # rm -rf root.r285885 memstick.img
   # mkdir -p /usr/local/r285885/root.r285885

   # cd /usr/local/r285885/src
   # make installworld  DESTDIR=/usr/local/r285885/root.r285885
   # make installkernel DESTDIR=/usr/local/r285885/root.r285885
   # make distrib-dirs  DESTDIR=/usr/local/r285885/root.r285885
   # make distribution  DESTDIR=/usr/local/r285885/root.r285885

   We now have in /usr/local/r285885 the following files/dirs:

   We populate the root.r285885 'file system' with:

   # cd /usr/local/r285885
   # mkdir -p                        root.r285885/usr/local/r285885
   # cp -Rp src                      root.r285885/usr/local/r285885
   # cp -Rp obj                      root.r285885/usr/local/r285885
   # cp -p ~guru/c720/rc.conf        root.r285885/etc
   # cp -p ~guru/c720/c720.kbd       root.r285885/etc
   # cp -p ~guru/c720/sysctl.conf    root.r285885/etc
   # cp -p ~guru/c720/loader.conf    root.r285885/boot

   # mkdir -p root.r285885/usr/local/sbin
   # cp -p /usr/local/sbin/pkg-static  root.r285885/usr/local/sbin/pkg-static

   # cat <<EOF >> root.r285885/boot/device.hints
hint.hdaa.1.nid20.config="as=3 seq=0"
hint.hdaa.1.nid25.config="as=2 seq=10"
hint.hdaa.1.nid26.config="as=2 seq=11"
hint.hdaa.1.nid33.config="as=3 seq=15"

   Now we create an image of the new root in /usr/local/r285885/root.r285885;
   I used a modified version of /usr/src/release/amd64/ which
   allows me to specify the size of the resulting image to be able to adjust
   this to the number of 512 byte blocks of the USB stick; the modifications are:

       size=14680064b   # fits into 7 GByte stick
       makefs -B little -M ${size} -m ${size} -f 400000 -o label=FreeBSD_Install ${2}.part ${1}

   We run the script to build the image:

   # cd /usr/local/r285885
   # rm memstick.img
   # ./ /usr/local/r285885/root.r285885 /usr/local/r285885/memstick.img
   Populating `/usr/local/r285885/memstick.img'
   Image `/usr/local/r285885/memstick.img' complete
   md1 created
   bootcode written to ...

   This gives us the image 'memstick.img' as less then 8 GByte:

   $ ls -l memstick.img
   -rw-r--r--   1 root  wheel  7518079488 02 ago 20:57 memstick.img

   Note: In contrast to the i386/, this script produces
   four partitions in the image, p3 contains the system and we
   can re-mount and check what is in there (or add more stuff) with:

   # unit=$(mdconfig -a -t vnode -f /usr/local/r285885/memstick.img)
   # mount /dev/${unit}p3  /mnt

   # umount /mnt

   We must set the partition 'active' (without this it did not boot in Dell Latitude E6330,
   see freebsd-current@ May 7, 2016):

   # gpart set -a active ${unit}

   Detach the virtual device

   # mdconfig -d -u ${unit}

   Finally, dd the memstick.img file to an USB key with:

   # dd if=memstick.img of=/dev/da0 bs=8m

2. Installation of the base system on the C720

   You should for Wifi at least copy your working /etc/wpa_supplicant.conf
   into the stick (and later into the new system):

   # mount /dev/da0p3 /mnt
   # cp -p /etc/wpa_supplicant.conf /mnt/etc
   # umount /mnt

   The installation of the base system into the C720 goes like this:

   Boot from the USB stick.


   If you want to do a test to check if the USB stick is fine, you can mount
   the old system to the USB stick, create some dummy directory and install into this,

   # mount /dev/ada0p2 /mnt
   # mkdir /mnt/r285885
   # sh
   # cd /usr/local/r285885/src
   # MAKEOBJDIRPREFIX=/usr/local/r285885/obj export MAKEOBJDIRPREFIX
   # make installworld  DESTDIR=/mnt/r285885
   # make installkernel DESTDIR=/mnt/r285885
   # make distrib-dirs  DESTDIR=/mnt/r285885
   # make distribution  DESTDIR=/mnt/r285885

   This would not overwrite your existing system, but just (test-) install into
   /mnt/r285885. If there is any error on this, your old system is still untouched.

   From here the procedure is now destructive to your old installation.

   AFTER making an external COPY of your HOME, re-partition the entire disk
   (I have a 256 GByte SSD) with 'bsdinstall'

   # umount /mnt    # in case it is still mounted from the test
   # bsdinstall
                                                      your keyboard input
   >>> Continue with /etc/c720.kbd keymap             --> Select (just press ENTER)
   Please choose a hostname...                        --> dummy-host-name ENTER (*)
   Please select the site ...                         --> Ok ENTER
   How would you like to partition your disk?         --> Auto (UFS) ENTER
   ada0                                               --> ENTER
   Entire Disk                                        --> ENTER
   GPT                                                --> ENTER
   ada0                   238 GB  GPT
     ada0p1               512 KB  freebsd-boot
     ada0p2               234 GB  freebsd-ufs
     ada0p3               4.0 GB  freebsd-swap
                                                      --> Finish ENTER
                                                      --> Commit ENTER

   After this just use the proposed layout, let bsdinstall write the
   partition table to the disk and when it starts installing from
   network, cancel this with Ctrl-C;

   (*) Note: bsdinstall can't write the host name into /etc/rc.conf; we will do this
   later; just put any string here as dummy-host-name;

   The partitions created by bsdinstall should now be visible as the following

   # ls -C1 /dev/ada0p*
   /dev/ada0p1               -- will be used for 512 KByte freebsd-boot
   /dev/ada0p2               -- will be used for 115 GByte freebsd-ufs
   /dev/ada0p3               -- will be used for   4 GByte freebsd-swap
   Mount the future root device /dev/ada0p2 as /mnt:

   # mount /dev/ada0p2 /mnt

   and install from the USB system into the mounted /mnt, use a shell 'sh'
   and the the default csh of user root:

   # sh
   # cd /usr/local/r285885/src
   # MAKEOBJDIRPREFIX=/usr/local/r285885/obj export MAKEOBJDIRPREFIX

   double check the definition of MAKEOBJDIRPREFIX with:

   # env | fgrep MAKEOBJDIRPREFIX

   if all is fine, we are ready to go:

   # make installworld  DESTDIR=/mnt
   # make installkernel DESTDIR=/mnt
   # make distrib-dirs  DESTDIR=/mnt
   # make distribution  DESTDIR=/mnt

   To be able to compile the system on the C720 itself, we copy the sources
   to the correct places:

   # cp -Rp /usr/local/r285885/src  /mnt/usr

   Create a correct /etc/fstab for the new system:
   # vi /mnt/etc/fstab
   /dev/ada0p2  /  ufs  rw,noatime 1 1
   /dev/ada0p3  none  swap  sw  0 0

   Copy some files from the USB system into place and reboot:

   # cp -p /etc/rc.conf         /mnt/etc
   # cp -p /etc/c720.kbd        /mnt/etc
   # cp -p /etc/sysctl.conf     /mnt/etc
   # cp -p /etc/motd            /mnt/etc
   # cp -p /boot/loader.conf    /mnt/boot
   # cp -p /boot/device.hints   /mnt/boot

   Configure Wifi for the new system:

   # cp -p /etc/wpa_supplicant.conf /mnt/etc

   # vi /mnt/etc/wpa_supplicant.conf         # add your Wifi secrets in this file

   We need a static version of pkg(8) to install later from our local
   repository without any connection to Internet:

   # mkdir -p /mnt/usr/local/sbin
   # cp -p /usr/local/sbin/pkg-static     /mnt/usr/local/sbin/pkg-static

   # umount /mnt
   # reboot

   When the system is up again, run:

   # tzsetup
   # passwd root

3. Installation of the package repository on the C720

   I have compiled around 1600 packages with the engine poudriere on an
   amd64 host Dell M4400. The system on this host was setup as described
   above. The packages are not part of the above mentioned USB stick, just
   for the reason that they have been created later on the Dell M4400
   and to keep the USB stick below the size of 8 marketing-GByte.

   The packages are in /usr/PKGDIR.20150726, around 1660, the last ones
   from March 14 this year. Best is to copy them from the 2nd USB stick
   to the installed system exactly on the same place:

   # mount -o ro /dev/da0s1a /mnt
   # cp -Rp /mnt/PKGDIR.20150726 /usr

   Create from this directory the package repository and install whatever you like.
   We define the repository with creating a file myrepo.conf as:

   # mkdir -p /usr/local/etc/pkg/repos
   # cp /usr/PKGDIR.20150726/myrepo.conf /usr/local/etc/pkg/repos

   Just for info:

   # cat /usr/local/etc/pkg/repos/myrepo.conf

           FreeBSD: {
               url: "file:///usr/PKGDIR.20150726",
               enabled: true,

   Now we create the repository and install packages:

   # pkg-static repo /usr/PKGDIR.20150726
   Creating repository in /usr/PKGDIR: 83%
   Packing files for repository: 100%

   Time to to install any stuff (and its dependencies):
   # pkg-static -R /usr/local/etc/pkg/repos/  install xorg
   # pkg-static -R /usr/local/etc/pkg/repos/  install kde-4.14.3
   # pkg-static -R /usr/local/etc/pkg/repos/  install xbindkeys
   # pkg-static -R /usr/local/etc/pkg/repos/  install hal        # maybe installed by kde already
   # pkg-static -R /usr/local/etc/pkg/repos/  install dbus       # maybe installed by kde already
   # pkg-static -R /usr/local/etc/pkg/repos/  install mutt
   # pkg-static -R /usr/local/etc/pkg/repos/  install muttprint

   restart the daemons with:

   # reboot  

   there is a bug and we must rename /usr/local/bin/akonadiserver to

4. Userland and some special tweakings on the C720

   After the above installation you should add a normal user with:

   # adduser

   login as this and populate its HOME with at least the followin files:

   $ vi ~/.xinitrc:
   setxkbmap -option terminate:ctrl_alt_bksp
   xrandr --output default --mode 1366x768
   xset dpms 50
   exec /usr/local/bin/startkde

   $ vi ~/.xserverrc
   exec X -nolisten tcp -retro -logverbose 6

   $ mkdir -p ~/.kde4/Autostart


   fetch it from

   There is a bug in KDE; the session will be completely unsuable if the
   file is not executeable; run:

   $ chmod 0755 ~/.kde4/Autostart/


   fetch it from (but note it should be
   named as ~/.xbindkeysrc with the dot '.')

   After this KDE4 should come up with simple:

   $ startx

   The Xorg server will use the Vesa driver and the moused, i.e. does not need
   any sofisticated xorg.conf file for this. Vesa is poor on a Haswell CPU/GPU,
   but you will not note it.

   Hints about keyboard related changes:

   The C720 has a very limited keyboard (no Windows key, no hardware
   power-off key, ...); we have to tweak the keyboard a bit:

   in console mode:

   hw.acpi.power_button_state=NONE in /etc/sysctl.conf

   to avoid the shutdown via the ACPI power-off key, but we need 'power-down'
   and reallow 'pdwn' with Shift-ALt-(ACPI)-powerdown key; see /etc/c720.kbd and

   In X11 / KDE4 mode:

   general layout see ~/.kde4/Autostart/
   which does:
   - it swaps Alt_l with Windows-key
   - it uses (old) CapsLock as ALt-l
   - it uses (new) Win-key as Mode_switch
   - it configures Prior and Next keys as Mode_switch+Up/Down
   - it configures Spanish tilded chars: áíóéñ...

   In addition we start xbindkeys (see ~/.xbindkeysrc) to configure

   - Alt+F6: "intel_backlight decr"
   - Alt+F7: "intel_backlight incr"

   to control the display brightness

   and we configure in KDE System Settings --> ShortCuts --> Global --> KMix:

   - Alt+F8  Mute
   - Alt+F9  Decrease Volume
   - Alt+F10 Increase Volume

   - page up/down, i.e. 'Prior' and 'Next':

   the mapping is defined in '' as Mode_switch+Up/Down which works
   fine in all X11 clients, but not in 'xterm'; for this bug(?) I defined
   in a file ~/.Xdefaults-c720-r285885:

   *VT100.translations: #override \
	Shift<Key>Up:           scroll-back(1,page) \n\
	Shift<Key>Down:         scroll-forw(1,page) \n\
	Shift<Key>F10: string("hola")

   (put a TAB before the lines with Shift....) and with this you can now use
   Shift+Mode_switch+Up/Down to get what you expect.

   Touchpad layout/functions:
   (stolen from
                 2/3               1/3
        |                    |   Middle   |
        |                    |   Button   |
        |       Left         |            |
        |      Button        +------------+
        |                    |   Right    |
        |                    |   Button   |
        |     Thumb/Button Area           | 15%
   Two finger scrolling   - Use two fingers for Z axis scrolling.
   Button down/2nd finger - While one finger clicks and holds down the
                            touchpad, the second one can be used to move
                            the mouse cursor. Useful for drawing or
                            selecting text.
   Thumb/Button Area      - The lower 15%* of the trackpad will not affect
                            the mouse cursor position. This allows for high
                            precision clicking, by controlling the cursor
                            with the index finger and pushing/holding the
                            pad down with the thumb.
                            * can be changed using sysctl
   Track-pad button       - Push physical button. Left 2/3rds of the pad
                            will issue a LEFT button event, upper right
                            corner will issue a MIDDLE button event,
                            lower right corner will issue a RIGHT
                            button event. Optionally tap to click
                            can be enabled (check *cyapa(4)* for details).

   my values in /etc/sysctl.conf are:


   see also man cyapa(4)

More information about the freebsd-questions mailing list