add xbindkeys package
[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 xbindkeys
72     pkg install firefox
73     (also install your favorite apps, GUIs, window managers, whatever)
74
75 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:
76
77     pkg install xf86-video-intel29
78
79 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.
80
81     Section "ServerLayout"
82             Identifier     "X.org Configured"
83             Screen      1  "Screen0" 0 0
84             InputDevice    "Mouse0" "CorePointer"
85             InputDevice    "Mouse1" "SendCoreEvents"
86             InputDevice    "TouchScreen0" "SendCoreEvents"
87             InputDevice    "Keyboard0" "CoreKeyboard"
88     EndSection
89
90     # This may be needed to prevent X from ignoring keyboard
91     # and mouse devices in xorg.conf.
92     #
93     Section "ServerFlags"
94             Option "AutoAddDevices" "False"
95     EndSection
96
97     Section "Files"
98             ModulePath   "/usr/local/lib/xorg/modules"
99             FontPath     "/usr/local/lib/X11/fonts/misc/"
100             FontPath     "/usr/local/lib/X11/fonts/TTF/"
101             FontPath     "/usr/local/lib/X11/fonts/OTF/"
102             FontPath     "/usr/local/lib/X11/fonts/Type1/"
103             FontPath     "/usr/local/lib/X11/fonts/100dpi/"
104             FontPath     "/usr/local/lib/X11/fonts/75dpi/"
105     EndSection
106
107     Section "Module"
108             Load  "dbe"
109             Load  "dri"
110             Load  "dri2"
111             Load  "extmod"
112             Load  "record"
113             Load  "glx"
114     EndSection
115
116     # Depending on how your keyboard probes, you may have to change this.
117     #
118     Section "InputDevice"
119             Identifier  "Keyboard0"
120             Driver      "kbd"
121     EndSection
122
123     Section "InputDevice"
124             Identifier  "Mouse0"
125             Driver      "mouse"
126             Option          "Protocol" "imps/2"
127             Option          "Device" "/dev/cyapa0-67"
128     EndSection
129
130     Section "InputDevice"
131             Identifier  "Mouse1"
132             Driver      "mouse"
133             Option          "Protocol" "auto"
134             Option          "Device" "/dev/sysmouse"
135             Option          "ZAxisMapping" "4 5"
136     EndSection
137
138     Section "InputDevice"
139             Identifier  "TouchScreen0"
140             Driver      "elographics"
141             Option          "Device" "/dev/atmel1-4a"
142     #   Option      "ZAxisMapping" "4 5 6 7"
143     EndSection
144
145     Section "Monitor"
146             Identifier   "Monitor0"
147             VendorName   "Monitor Vendor"
148             ModelName    "Monitor Model"
149     EndSection
150
151     Section "Device"
152             #Option     "NoAccel" "true"                # [<bool>]
153             #Option     "AccelMethod"           # <str>
154             #Option     "Backlight"             # <str>
155             #Option     "DRI"                   # <str>
156             Identifier  "Card0"
157             Driver      "intel"
158             #Option     "ReprobeOutputs" "true"
159             #BusID      "PCI:0:2:0"
160     EndSection
161
162     Section "Screen"
163             Identifier "Screen0"
164             Device     "Card0"
165             Monitor    "Monitor0"
166             SubSection "Display"
167                     Depth     1
168             EndSubSection
169             SubSection "Display"
170                     Depth     4
171             EndSubSection
172             SubSection "Display"
173                     Depth     8
174             EndSubSection
175             SubSection "Display"
176                     Depth     15
177             EndSubSection
178             SubSection "Display"
179                     Depth     16
180             EndSubSection
181             SubSection "Display"
182                     Depth     24
183             EndSubSection
184     EndSection
185
186 For the touchscreen to work, you need to install the "xf86-input-elographics" driver:
187
188     pkg install xf86-input-elographics
189
190 See 
191 [these](http://lists.dragonflybsd.org/pipermail/commits/2014-January/198982.html) 
192 [commits](http://lists.dragonflybsd.org/pipermail/commits/2014-January/198985.html) 
193 [for](http://lists.dragonflybsd.org/pipermail/commits/2014-January/198994.html) 
194 [details](http://lists.dragonflybsd.org/pipermail/commits/2014-January/198995.html) 
195 on how to simulate left, right, and middle clicks with the touchpad, and also support simulated mousewheel scrolling.
196
197 We suggest [starting X via xdm](http://www.dragonflybsd.org/docs/newhandbook/X/#index4h3) which needs a package in addition to xorg:
198
199     pkg install xdm
200
201 ### Further Mouse Setup
202
203 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:
204
205     moused_enable="YES"
206
207 If that doesn't work then set moused_enable="NO" in /etc/rc.conf and start moused manually in /etc/rc.local:
208
209     moused -p /dev/ums0
210     moused -p /dev/ums1
211
212 ### Touchpad and Touchscreen problems
213
214 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.
215
216 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.
217
218 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.
219
220 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. 
221
222 ### Volume and backlight adjustment keys
223 In order to use these keys make two scripts:
224
225     #!/bin/csh
226     #
227     # mute script  "mute"
228     
229     set curvol = "`mixer -f /dev/mixer1 -s vol`"
230     
231     if ( -f ~/.savemute ) then
232             set lastvol = "`cat ~/.savemute`"
233     else
234             set lastvol = ""
235     endif
236     
237     if ( "$curvol" == "vol 0:0" ) then
238             if ( "$lastvol" != "" ) then
239                     eval mixer -f /dev/mixer1 $lastvol
240             endif
241     else
242             if ( "$lastvol" != "$curvol" ) then
243                     echo "$curvol" > ~/.savemute
244             endif
245             mixer -f /dev/mixer1 vol 0
246     endif
247
248     #!/bin/csh
249     #
250     # backlight script "backlight"
251     
252     set level = `sysctl -n hw.backlight_level`
253     @ level = $level + $argv
254     sysctl hw.backlight_level=${level}
255
256 add next lines to `~/.xbindkeysrc`:
257
258     # Volume
259     #
260     "/path/to/scripts/mute"
261       F8
262     
263     "mixer -f /dev/mixer1 vol -5"
264       F9
265     
266     "mixer -f /dev/mixer1 vol +5"
267       F10
268     
269     # Screen
270     #
271     "/path/to/scripts/backlight -20"
272       F6
273     
274     "/path/to/scripts/backlight 20"
275       F7
276
277 You must call xbindkeys somewhere in your `.xinitrc`.
278
279 *Hint:* You can set default blacklight level by placing next line in `.xinitrc`:
280
281     sysctl hw.backlight_level=370
282
283 ### Home, End, Delete, ...
284
285 With Alt as modifier you can get:
286
287 Insert    = Alt + \
288
289 Delete    = Alt + BackSpace
290
291 Home      = Alt + Left
292
293 End       = Alt + Right
294
295 PageUp    = Alt + Up
296
297 PageDown  = Alt + Down
298
299 Create dirs for keyboard configuration
300
301     mkdir -p ${HOME}/.config/xkb/types ${HOME}/.config/xkb/symbols
302
303 Create modifiers' config file `${HOME}/.config/xkb/types/c720` which contains
304
305     xkb_types "c720" {
306         virtual_modifiers Alt;
307         type "ARROW" {
308             modifiers    = Shift+Alt;
309             map[Shift]  = Level2;
310             map[Alt]    = Level3;
311             map[Alt+Shift]    = Level3;
312             level_name[Level1] = "Base";
313             level_name[Level2] = "Caps";
314             level_name[Level3] = "Alt";
315         };
316     };
317
318 Create symbols' config file `${HOME}/.config/xkb/symbols/c720` which contains
319
320     xkb_symbols "c720" {
321         key <BKSL> {
322             type="ARROW",
323             repeat=yes,
324             symbol[Group1] = [backslash, bar, Insert],
325             symbol[Group2] = [backslash, slash, Insert],
326             actions[Group1] = [
327                 NoAction(),
328                 NoAction(),
329                 RedirectKey(key=<INS>, clearmods=Alt)
330             ],
331             actions[Group2] = [
332                 NoAction(),
333                 NoAction(),
334                 RedirectKey(key=<INS>, clearmods=Alt)
335             ]
336         };
337         key <BKSP> {
338             type="ARROW",
339             repeat=yes,
340             [BackSpace, BackSpace, Delete],
341             actions[Group1] = [
342                 NoAction(),
343                 NoAction(),
344                 RedirectKey(key=<DELE>, clearmods=Alt)
345             ]
346         };
347         key <LEFT> {
348             type="ARROW",
349             [Left, Left, Home],
350             actions[Group1] = [
351                 NoAction(),
352                 NoAction(),
353                 RedirectKey(key=<HOME>, clearmods=Alt)
354             ]
355         };
356         key <RGHT> {
357             type="ARROW",
358             repeat=yes,
359             [Right, Right, End],
360             actions[Group1] = [
361                 NoAction(),
362                 NoAction(),
363                 RedirectKey(key=<END>, clearmods=Alt)
364             ]
365         };
366         key <UP> {
367             type="ARROW",
368             repeat=yes,
369             [Up, Up, Prior],
370             actions[Group1] = [
371                 NoAction(),
372                 NoAction(),
373                 RedirectKey(key=<PGUP>, clearmods=Alt)
374             ]
375         };
376         key <DOWN> {
377             type="ARROW",
378             [Down, Down, Next],
379             actions[Group1] = [
380                 NoAction(),
381                 NoAction(),
382                 RedirectKey(key=<PGDN>, clearmods=Alt)
383             ]
384         };
385     };
386
387 Add next line to `.xinitrc` (or in some autoload/autostart)
388
389     setxkbmap -layout "us+c720" -types "complete+c720" -print|xkbcomp -I"$HOME/.config/xkb" - "${DISPLAY%%.*}"
390  
391 ### Power savings
392
393 This sysctl setting tells the Chromebook to automatically go to the best power state it can:
394
395     sysctl machdep.mwait.CX.idle=AUTODEEP
396
397 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.
398