make sure dbus is installed too.
[ikiwiki.git] / docs / handbook / ConfigChromebook / index.mdwn
1 ## Chromebook Config
2
3 DragonFly currently supports the Acer C720 and C720p Intel-haswell chromebook.  You must follow the linux directions on how to unlock the chromebook so non-chrome OSs can be installed.  Generally speaking, the linux directions get you to a point where you can boot any kernel via the built-in SeaBIOS.  Note that you can always restore your chromebook back to using chrome by following Google's directions on recovering a chromebook.
4
5 On the Acer C720 you need to load specific drivers to gain support for the touchpad and touchscreen.  You also need to load the sound drivers.  In "/boot/loader.conf" add:
6
7     ig4_load="YES"
8     cyapa_load="YES"
9     atmel_mxt_load="YES"
10     if_ath_load="YES"
11     sound_load="YES"
12     snd_hda_load="YES"
13
14 The atmel module is only needed for the touchscreen model.
15
16 If you have trouble with the laptop recognizing the touchpad, try moving the ig4, cyapa, and atmel module loads into /etc/rc.local (kldload'ing the modules from /etc/rc.local).  It is unclear to me why there are sometimes issues initializing the drivers in early boot.
17
18 ### WIFI setup
19
20 For WIFI support you will want this in your "/etc/rc.conf"
21
22     wlans_ath0="wlan0"
23     ifconfig_wlan0="DHCP WPA"
24
25 And your "/etc/wpa_supplicant.conf" file should contain entries for all the wifi basestations you can connect to.  Most typically an entry looks like this:
26
27     network={
28         ssid="blahblah"
29         psk="passwordhere"
30     }
31
32 Its easiest to just reboot after setting up the files rather than trying to start wpa_supplicant manually.  You can have multiple network={} elements in the config file.
33
34 Both 2.4 GHz and 5 GHz base stations will work.  5 GHz base stations may have a range issue though.  ifconfig wlan0 for more information.  Also make sure that your /etc/rc.conf does not have any setup for ath0, if you used the installer it might have done something.
35
36 ### Disabling the power button
37
38 The power button is a function key on the right and is very easy to hit accidently.  You can disable the power button with a sysctl:
39
40     sysctl hw.acpi.power_button_state=NONE
41
42 You can put 'hw.acpi.power_button_state=NONE' in /etc/sysctl.conf to make this automatic on startup.
43
44 ### dbus setup
45
46 Newer versions of firefox do not start dbus automatically, so we recommend starting it up from /etc/rc.conf with this entry:
47
48     dbus_enable="YES"
49
50 I think you can start it manually with 'dbus-daemon --system' if you do not want to reboot to pick it up from rc.conf.
51
52 ### Sound Setup
53
54 The sound and snd_hda drivers can be loaded from /boot/loader.conf, which we have already described above.  The C720[P] has two sound chips, one built into the Haswell cpu which drives the HDMI digital sound, and a Realtek AC0283 which drives the built-in speakers and headphones.
55
56 You should see /dev/dsp0 and /dev/dsp1 and the hw.snd.default_unit sysctl should already default to unit 1.  I suggest testing sound with mpg123 and your favorite MP3.  It should just work.  However, we've noticed that some C720Ps use the wrong chipid in the pciconf output (probably a BIOS issue) so if your machine only sees one sound device the driver might need a tweak.
57
58 ### X11 Setup
59
60 DragonFly supports accelerated X on Haswell cpus via the "intel" driver.  You no longer have to recompile the X server.  We recommend the following package sets:
61
62     pkg install xorg-apps
63     pkg install xorg-docs
64     pkg install xorg-fonts
65     pkg install xorg-libraries
66     pkg install xorg-macros
67     pkg install xorg-drivers
68     pkg install xorg-server
69     pkg install xdm
70     pkg install dbus
71     pkg install firefox
72     (also install your favorite apps, GUIs, window managers, whatever)
73
74 The base intel driver in xorg-drivers needs to be replaced with the intel29 driver from dports.  As the X11 work has progressed this has become easier so now you just need to install the package:
75
76     pkg install xf86-video-intel29
77
78 The "/etc/X11/xorg.conf" configuration file should consist of the following.  If you have trouble getting the keyboard to work you may have to mess around with the keyboard settings.  But this should work.
79
80     Section "ServerLayout"
81             Identifier     "X.org Configured"
82             Screen      1  "Screen0" 0 0
83             InputDevice    "Mouse0" "CorePointer"
84             InputDevice    "Mouse1" "SendCoreEvents"
85             InputDevice    "TouchScreen0" "SendCoreEvents"
86             InputDevice    "Keyboard0" "CoreKeyboard"
87     EndSection
88
89     # This may be needed to prevent X from ignoring keyboard
90     # and mouse devices in xorg.conf.
91     #
92     Section "ServerFlags"
93             Option "AutoAddDevices" "False"
94     EndSection
95
96     Section "Files"
97             ModulePath   "/usr/local/lib/xorg/modules"
98             FontPath     "/usr/local/lib/X11/fonts/misc/"
99             FontPath     "/usr/local/lib/X11/fonts/TTF/"
100             FontPath     "/usr/local/lib/X11/fonts/OTF/"
101             FontPath     "/usr/local/lib/X11/fonts/Type1/"
102             FontPath     "/usr/local/lib/X11/fonts/100dpi/"
103             FontPath     "/usr/local/lib/X11/fonts/75dpi/"
104     EndSection
105
106     Section "Module"
107             Load  "dbe"
108             Load  "dri"
109             Load  "dri2"
110             Load  "extmod"
111             Load  "record"
112             Load  "glx"
113     EndSection
114
115     # Depending on how your keyboard probes, you may have to change this.
116     #
117     Section "InputDevice"
118             Identifier  "Keyboard0"
119             Driver      "kbd"
120     EndSection
121
122     Section "InputDevice"
123             Identifier  "Mouse0"
124             Driver      "mouse"
125             Option          "Protocol" "imps/2"
126             Option          "Device" "/dev/cyapa0-67"
127     EndSection
128
129     Section "InputDevice"
130             Identifier  "Mouse1"
131             Driver      "mouse"
132             Option          "Protocol" "auto"
133             Option          "Device" "/dev/sysmouse"
134             Option          "ZAxisMapping" "4 5"
135     EndSection
136
137     Section "InputDevice"
138             Identifier  "TouchScreen0"
139             Driver      "elographics"
140             Option          "Device" "/dev/atmel1-4a"
141     #   Option      "ZAxisMapping" "4 5 6 7"
142     EndSection
143
144     Section "Monitor"
145             Identifier   "Monitor0"
146             VendorName   "Monitor Vendor"
147             ModelName    "Monitor Model"
148     EndSection
149
150     Section "Device"
151             #Option     "NoAccel" "true"                # [<bool>]
152             #Option     "AccelMethod"           # <str>
153             #Option     "Backlight"             # <str>
154             #Option     "DRI"                   # <str>
155             Identifier  "Card0"
156             Driver      "intel"
157             #Option     "ReprobeOutputs" "true"
158             #BusID      "PCI:0:2:0"
159     EndSection
160
161     Section "Screen"
162             Identifier "Screen0"
163             Device     "Card0"
164             Monitor    "Monitor0"
165             SubSection "Display"
166                     Depth     1
167             EndSubSection
168             SubSection "Display"
169                     Depth     4
170             EndSubSection
171             SubSection "Display"
172                     Depth     8
173             EndSubSection
174             SubSection "Display"
175                     Depth     15
176             EndSubSection
177             SubSection "Display"
178                     Depth     16
179             EndSubSection
180             SubSection "Display"
181                     Depth     24
182             EndSubSection
183     EndSection
184
185 For the touchscreen to work, you need to install the "xf86-input-elographics" driver:
186
187     pkg install xf86-input-elographics
188
189 See 
190 [these](http://lists.dragonflybsd.org/pipermail/commits/2014-January/198982.html) 
191 [commits](http://lists.dragonflybsd.org/pipermail/commits/2014-January/198985.html) 
192 [for](http://lists.dragonflybsd.org/pipermail/commits/2014-January/198994.html) 
193 [details](http://lists.dragonflybsd.org/pipermail/commits/2014-January/198995.html) 
194 on how to simulate left, right, and middle clicks with the touchpad, and also support simulated mousewheel scrolling.
195
196 We suggest [starting X via xdm](http://www.dragonflybsd.org/docs/newhandbook/X/#index4h3) which needs a package in addition to xorg:
197
198     pkg install xdm
199
200 ### Further Mouse Setup
201
202 We recommend using moused and /dev/sysmouse to handle external USB mouse attachments.  By using moused, mice can be plugged and unplugged without imploding X11.  Try putting this in your /etc/rc.conf:
203
204     moused_enable="YES"
205
206 If that doesn't work then set moused_enable="NO" in /etc/rc.conf and start moused manually in /etc/rc.local:
207
208     moused -p /dev/ums0
209     moused -p /dev/ums1
210
211 ### Touchpad and Touchscreen problems
212
213 Some people seem to have jitter problems with either or both the touchpad and the touchscreen, even on linux-based systems and the original chomebook chrome install.  It depends on a number of factors and we aren't sure why it happens, but the problems seem to be at their worst when the laptop is sitting on a non-conductive (e.g. plastic) table with power connected.  The problems can sometimes be mitigated by doing a few touches, or placing the laptop on your lap, or on some other surface, or disconnecting the power.
214
215 The issue does not crop up on all C720[P]'s.  If the problem gets too annoying you may have to disable either or both the touchpad and touchscreen.
216
217 A secondary issue is that when the touchscreen is going bonkers it can cause X to get sludgy. If you have a refresh problem with X, it might be the touchscreen driver that is causing it.
218
219 I've seen jitter issues on my particular C720 and C720P occasionally but they go away completely if the laptop is sitting on a wood table or my lap. 
220
221 ### Volume and backlight adjustment keys
222 In order to use these keys make two scripts:
223
224     #!/bin/csh
225     #
226     # mute script
227     
228     set curvol = "`mixer -f /dev/mixer1 -s vol`"
229     
230     if ( -f ~/.savemute ) then
231             set lastvol = "`cat ~/.savemute`"
232     else
233             set lastvol = ""
234     endif
235     
236     if ( "$curvol" == "vol 0:0" ) then
237             if ( "$lastvol" != "" ) then
238                     eval mixer -f /dev/mixer1 $lastvol
239             endif
240     else
241             if ( "$lastvol" != "$curvol" ) then
242                     echo "$curvol" > ~/.savemute
243             endif
244             mixer -f /dev/mixer1 vol 0
245     endif
246
247     #!/bin/csh
248     #
249     # backlight script
250     
251     set level = `sysctl -n hw.backlight_level`
252     @ level = $level + $argv
253     sysctl hw.backlight_level=${level}
254
255 add next lines to `~/.xbindkeysrc`:
256
257     # Volume
258     #
259     "/path/to/scripts/mute"
260       F8
261     
262     "mixer -f /dev/mixer1 vol -5"
263       F9
264     
265     "mixer -f /dev/mixer1 vol +5"
266       F10
267     
268     # Screen
269     #
270     "/path/to/scripts/backlight -20"
271       F6
272     
273     "/path/to/scripts/backlight 20"
274       F7
275
276 You must call xbindkeys somewhere in your `.xinitrc`.
277
278 *Hint:* You can set default blacklight level by placing next line in `.xinitrc`:
279
280     sysctl hw.backlight_level=370
281
282 ### Home, End, Delete, ...
283
284 With Alt as modifier you can get:
285
286 Insert    = Alt + \
287
288 Delete    = Alt + BackSpace
289
290 Home      = Alt + Left
291
292 End       = Alt + Right
293
294 PageUp    = Alt + Up
295
296 PageDown  = Alt + Down
297
298 Create dirs for keyboard configuration
299
300     mkdir -p ${HOME}/.config/xkb/types ${HOME}/.config/xkb/symbols
301
302 Create modifiers' config file `${HOME}/.config/xkb/types/c720` which contains
303
304     xkb_types "c720" {
305         virtual_modifiers Alt;
306         type "ARROW" {
307             modifiers    = Shift+Alt;
308             map[Shift]  = Level2;
309             map[Alt]    = Level3;
310             map[Alt+Shift]    = Level3;
311             level_name[Level1] = "Base";
312             level_name[Level2] = "Caps";
313             level_name[Level3] = "Alt";
314         };
315     };
316
317 Create symbols' config file `${HOME}/.config/xkb/symbols/c720` which contains
318
319     xkb_symbols "c720" {
320         key <BKSL> {
321             type="ARROW",
322             repeat=yes,
323             symbol[Group1] = [backslash, bar, Insert],
324             symbol[Group2] = [backslash, slash, Insert],
325             actions[Group1] = [
326                 NoAction(),
327                 NoAction(),
328                 RedirectKey(key=<INS>, clearmods=Alt)
329             ],
330             actions[Group2] = [
331                 NoAction(),
332                 NoAction(),
333                 RedirectKey(key=<INS>, clearmods=Alt)
334             ]
335         };
336         key <BKSP> {
337             type="ARROW",
338             repeat=yes,
339             [BackSpace, BackSpace, Delete],
340             actions[Group1] = [
341                 NoAction(),
342                 NoAction(),
343                 RedirectKey(key=<DELE>, clearmods=Alt)
344             ]
345         };
346         key <LEFT> {
347             type="ARROW",
348             [Left, Left, Home],
349             actions[Group1] = [
350                 NoAction(),
351                 NoAction(),
352                 RedirectKey(key=<HOME>, clearmods=Alt)
353             ]
354         };
355         key <RGHT> {
356             type="ARROW",
357             repeat=yes,
358             [Right, Right, End],
359             actions[Group1] = [
360                 NoAction(),
361                 NoAction(),
362                 RedirectKey(key=<END>, clearmods=Alt)
363             ]
364         };
365         key <UP> {
366             type="ARROW",
367             repeat=yes,
368             [Up, Up, Prior],
369             actions[Group1] = [
370                 NoAction(),
371                 NoAction(),
372                 RedirectKey(key=<PGUP>, clearmods=Alt)
373             ]
374         };
375         key <DOWN> {
376             type="ARROW",
377             [Down, Down, Next],
378             actions[Group1] = [
379                 NoAction(),
380                 NoAction(),
381                 RedirectKey(key=<PGDN>, clearmods=Alt)
382             ]
383         };
384     };
385
386 Add next line to `.xinitrc` (or in some autoload/autostart)
387
388     setxkbmap -layout "us+c720" -types "complete+c720" -print|xkbcomp -I"$HOME/.config/xkb" - "${DISPLAY%%.*}"
389  
390 ### Power savings
391
392 This sysctl setting tells the Chromebook to automatically go to the best power state it can:
393
394     sysctl machdep.mwait.CX.idle=AUTODEEP
395
396 WARNING!  We have recently come to believe that this mode may cause chromebooks lockup on disk I/O (AHCI), so if you get lockups please try without setting this mode.
397