https://wiki.archlinux.org/api.php?action=feedcontributions&user=Serh&feedformat=atomArchWiki - User contributions [en]2024-03-29T12:03:42ZUser contributionsMediaWiki 1.41.0https://wiki.archlinux.org/index.php?title=Graphics_tablet&diff=413737Graphics tablet2015-12-29T05:37:06Z<p>Serh: CTH670 issue obsolete, but plenty of issues with the newer Intuos line, added some solutions to those problems and some advice on having a udev script with xsetwacom commands.</p>
<hr />
<div>[[Category:Graphics tablet]]<br />
[[ja:Wacom タブレット]]<br />
This guide was started for ''USB'' based Wacom tablets, so much of the info in here focuses on that. Usually it is recommended to rely on [[Xorg]]'s auto-detection or to use a '''dynamic''' setup.<br />
However for an ''internal'' tablet device one might consider a '''static''' Xorg setup in case autodetection does not work.<br />
A static [[Xorg]] setup is usually not able to recognize your Wacom tablet when it is connected to a different ''USB'' port or even after unplugging and replugging it into the same port, and as such it should be considered as deprecated.<br />
<br />
== Installing ==<br />
<br />
=== Check if kernel drivers needed (usually not) ===<br />
<br />
After plugging in the tablet (in case of a USB device) check {{ic|lsusb}} and/or {{ic|<nowiki>dmesg | grep -i wacom</nowiki>}} to see if the kernel recognizes your tablet. It should also be listed in {{ic|/proc/bus/input/devices}}.<br />
<br />
In case it is not recognized, it might happen for new devices not to be supported by the current kernel. Sometimes the tablet has already support by a more recent driver than the one that comes with the kernel. In that case you may try to install {{AUR|input-wacom-dkms}} from the [[AUR]].<br />
<br />
=== Install Wacom drivers ===<br />
<br />
Thanks to [http://linuxwacom.sourceforge.net The Linux Wacom Project], you only need to install the {{Pkg|xf86-input-wacom}} package, which contains everything needed to use a Wacom tablet on Linux.<br />
<br />
{{Note|There is also {{AUR|xf86-input-wacom-git}} in AUR which provides git version of ''xf86-input-wacom'', but you might encounter some troubles. For me the buttons for example did only work with the stable release, not with the git version. So it is recommended to try ''xf86-input-wacom'' first.}}<br />
<br />
=== Automatic setup ===<br />
<br />
Newer versions of X should be able to automatically detect and configure your device. Before going any further, restart X so the new udev rules take effect. Test if your device was recognized completely (i.e., that both pen and eraser work, if applicable), by issuing command<br />
<br />
$ xsetwacom --list devices<br />
<br />
which should detect all devices with type, for example<br />
<br />
Wacom Bamboo 2FG 4x5 Pen stylus id: 8 type: STYLUS <br />
Wacom Bamboo 2FG 4x5 Pen eraser id: 9 type: ERASER <br />
Wacom Bamboo 2FG 4x5 Finger touch id: 13 type: TOUCH <br />
Wacom Bamboo 2FG 4x5 Finger pad id: 14 type: PAD <br />
<br />
You can also test it by opening {{Pkg|gimp}} or {{Pkg|xournal}} and checking the extended input devices section, or whatever tablet-related configuration is supported by the software of your choice.<br />
<br />
For this to work you do not need any {{ic|xorg.conf}} file, any configurations are made in files in the {{ic|/etc/X11/xorg.conf.d/}} folder.<br />
If everything is working you can skip the manual configuration and '''proceed''' to the configuration section to learn how to further customize your tablet.<br />
<br />
With the arrival of Xorg 1.8 support for HAL was dropped in favor of [[udev]] which might break auto-detection for some tablets as fitting udev rules might not exist yet, so you may need to write your own.<br />
<br />
If you have installed {{Pkg|libwacom}} or associated packages like {{Aur|libwacom-fedora}}{{Broken package link|{{aur-mirror|libwacom-fedora}}}} remove those packages first. They are known to cause problems with newer version of X. ''xf86-input-wacom'' is the only package you need to install the X11 drivers.<br />
<br />
=== Manual setup ===<br />
A manual configuration is done in {{ic|/etc/X11/xorg.conf}} or in a separate file in the {{ic|/etc/X11/xorg.conf.d/}} directory.<br />
The Wacom tablet device is accessed using a input event interface in {{ic|/dev/input/}} which is provided by the kernel driver.<br />
The interface number {{ic|event??}} is likely to change when unplugging and replugging into the same or especially a different ''USB'' port.<br />
Therefore it is wise to not refer to the device using its concrete {{ic|event??}} interface ('''static''' configuration) but by letting ''udev'' dynamically create a symbolic link to the correct {{ic|event}} file ('''dynamic''' configuration).<br />
<br />
====Dynamic with udev====<br />
{{Note|In AUR there is wacom-udev package, which includes udev-rules-file. You might skip this part and move on to the {{ic|xorg.conf}} configuration if you are using the wacom-udev package from AUR.}}<br />
<br />
Assuming ''udev'' is already installed you simply need to install {{AUR|wacom-udev}} from the [[AUR]].<br />
<br />
=====USB-devices=====<br />
After (re-)plugging in your ''USB''-tablet (or at least after rebooting) some symbolic links should appear in {{ic|/dev/input}} referring to your tablet device.<br />
<br />
$ ls /dev/input/wacom* <br />
/dev/input/wacom /dev/input/wacom-stylus /dev/input/wacom-touch<br />
<br />
If not, your device is likely to be not yet included in the ''udev'' configuration from ''wacom-udev'' which resides in {{ic|/usr/lib/udev/rules.d/10-wacom.rules}}. It is a good idea to copy the file e.g. to {{ic|10-my-wacom.rules}} before modifying it, else it might be reverted by a package upgrade.<br />
<br />
Add your device to the file by duplicating some line of another device and adapting ''idVendor'',''idProduct'' and the symlink name to your device.<br />
The two id's can by determined using<br />
<br />
$ lsusb | grep -i wacom<br />
Bus 002 Device 007: ID 056a:0062 Wacom Co., Ltd<br />
<br />
In this example idVendor is 056a and idProduct 0062.<br />
In case you have device with touch (e.g. Bamboo Pen&Touch) you might need to add a second line for the touch input interface.<br />
For details check the linuxwacom wiki [http://sourceforge.net/apps/mediawiki/linuxwacom/index.php?title=Fixed_device_files_with_udev Fixed device files with udev].<br />
<br />
Save the file and reload udev's configuration profile using the command ''udevadm control --reload-rules''<br />
Check again the content of ''/dev/input'' to make sure that the ''wacom'' symlinks appeared.<br />
Note that you may need to plug-in the tablet again for the device to appear.<br />
<br />
The files of further interest for the ''Xorg'' configuration are {{ic|/dev/input/wacom}} and for a touch-device also {{ic|/dev/input/wacom_touch}}.<br />
<br />
=====Serial devices=====<br />
The {{AUR|wacom-udev}} should also include support for serial devices. Users of serial tablets might be also interested in the inputattach tool from {{Pkg|linuxconsole}} package. The inputattach command allows to bind serial device into /dev/input tree, for example with:<br />
<br />
# inputattach --w8001 /dev/ttyS0<br />
<br />
See ''man inputattach'' for help about available options.<br />
As for USB devices one should end up with a file {{ic|/dev/input/wacom}} and proceed with the ''Xorg'' configuration.<br />
<br />
====Static setup====<br />
If you insist in using a static setup just refer to your tablet in the ''Xorg'' configuration in the next section using the correct {{ic|/dev/input/event??}} files as one can find out by looking into {{ic|/proc/bus/input/devices}}.<br />
<br />
====Xorg configuration====<br />
<br />
In either case, dynamic or static setup you got now one or two files in {{ic|/dev/input/}} which refer to the correct input event devices of your tablet. All that is left to do is add the relevant information to {{ic|/etc/X11/xorg.conf}}, or a dedicated file under {{ic|/etc/X11/xorg.conf.d/}}.<br />
The exact configuration depends on your tablet's features of course. {{ic|xsetwacom --list devices}} might give helpful information on what ''InputDevice'' sections are needed for your tablet.<br />
<br />
An example configuration for a ''Volito2'' might look like this<br />
<br />
Section "InputDevice"<br />
Driver "wacom"<br />
Identifier "stylus"<br />
Option "Device" "/dev/input/wacom" # or the corresponding event?? for a static setup<br />
Option "Type" "stylus"<br />
Option "USB" "on" # USB ONLY<br />
Option "Mode" "Relative" # other option: "Absolute"<br />
Option "Vendor" "WACOM"<br />
Option "tilt" "on" # add this if your tablet supports tilt<br />
Option "Threshold" "5" # the official linuxwacom howto advises this line<br />
EndSection<br />
Section "InputDevice"<br />
Driver "wacom"<br />
Identifier "eraser"<br />
Option "Device" "/dev/input/wacom" # or the corresponding event?? for a static setup<br />
Option "Type" "eraser"<br />
Option "USB" "on" # USB ONLY<br />
Option "Mode" "Relative" # other option: "Absolute"<br />
Option "Vendor" "WACOM"<br />
Option "tilt" "on" # add this if your tablet supports tilt<br />
Option "Threshold" "5" # the official linuxwacom howto advises this line<br />
EndSection<br />
Section "InputDevice"<br />
Driver "wacom"<br />
Identifier "cursor"<br />
Option "Device" "/dev/input/wacom" # or the corresponding event?? for a static setup<br />
Option "Type" "cursor"<br />
Option "USB" "on" # USB ONLY<br />
Option "Mode" "Relative" # other option: "Absolute"<br />
Option "Vendor" "WACOM"<br />
EndSection<br />
<br />
Make sure that you also change the path ({{Ic|"Device"}}) to your mouse, as it will be {{Ic|/dev/input/mouse_udev}} now.<br />
<br />
Section "InputDevice"<br />
Identifier "Mouse1"<br />
Driver "mouse"<br />
Option "CorePointer"<br />
Option "Device" "/dev/input/mouse_udev"<br />
Option "SendCoreEvents" "true"<br />
Option "Protocol" "IMPS/2"<br />
Option "ZAxisMapping" "4 5"<br />
Option "Buttons" "5"<br />
EndSection<br />
Add this to the ''ServerLayout'' section<br />
<br />
InputDevice "cursor" "SendCoreEvents" <br />
InputDevice "stylus" "SendCoreEvents"<br />
InputDevice "eraser" "SendCoreEvents"<br />
And finally make sure to update the identifier of your mouse in the ''ServerLayout'' section &ndash; as mine went from<br />
<br />
InputDevice "Mouse0" "CorePointer"<br />
to<br />
<br />
InputDevice "Mouse1" "CorePointer"<br />
<br />
== Configuration ==<br />
<br />
=== General concepts ===<br />
<br />
The configuration can be done in two ways temporary using the `xsetwacom` tool, which is included in ''xf86-input-wacom'' or permanent in {{ic|xorg.conf}} or better in a extra file in {{ic|/etc/X11/xorg.conf.d}}.<br />
The possible options are identical so it is recommended to first use `xsetwacom` for testing and later add the final config to the ''Xorg'' configuration files.<br />
<br />
==== Temporary configuration ====<br />
<br />
For the beginning it is a good idea to inspect the default configuration and all possible options using the following commands.<br />
<br />
$ xsetwacom --list devices # list the available devices for the get/set commands<br />
Wacom Bamboo 16FG 4x5 Finger touch id: 12 type: TOUCH<br />
Wacom Bamboo 16FG 4x5 Finger pad id: 13 type: PAD <br />
Wacom Bamboo 16FG 4x5 Pen stylus id: 17 type: STYLUS <br />
Wacom Bamboo 16FG 4x5 Pen eraser id: 18 type: ERASER<br />
$ xsetwacom --get "Wacom Bamboo 16FG 4x5" all # using the device name<br />
$ xsetwacom --get 17 all # or equivalently use the device id<br />
$ xsetwacom --list parameters # to get an explanation of the Options<br />
$ man wacom # get even more details<br />
<br />
'''Caution''', do not use the device id when writing shell scripts to set some options as the ids might change after an hotplug.<br />
<br />
Options can be changed with the {{ic|--set}} flag. Some useful examples are<br />
<br />
$ xsetwacom --set "Wacom Bamboo 16FG 4x5 Finger touch" ScrollDistance 50 # change scrolling speed<br />
$ xsetwacom --set "Wacom Bamboo 16FG 4x5 Finger touch" Gesture off # disable multitouch gestures<br />
$ xsetwacom --set "Wacom Bamboo 16FG 4x5 Finger touch" Touch off # disable touch<br />
<br />
For further configuration tips and tricks see below in [[#Specific configuration tips]].<br />
{{Note|You can reset your temporary configuration at any time by unplugging and replugging in your tablet.}}<br />
<br />
==== Permanent configuration ====<br />
<br />
To make a permanent configuration the preferred way for ''Xorg''>1.8 is to create a new file in {{ic|/etc/X11/xorg.conf.d}}<br />
e.g. {{ic|52-wacom-options.conf}} with the following content.<br />
<br />
{{hc|/etc/X11/xorg.conf.d/52-wacom-options.conf|<br />
Section "InputClass"<br />
Identifier "Wacom Bamboo stylus options"<br />
MatchDriver "wacom"<br />
MatchProduct "Pen"<br />
<br />
# Apply custom Options to this device below.<br />
Option "Rotate" "none"<br />
Option "RawSample" "20"<br />
Option "PressCurve" "0,10,90,100"<br />
EndSection<br />
<br />
Section "InputClass"<br />
Identifier "Wacom Bamboo eraser options"<br />
MatchDriver "wacom"<br />
MatchProduct "eraser"<br />
<br />
# Apply custom Options to this device below.<br />
Option "Rotate" "none"<br />
Option "RawSample" "20"<br />
Option "PressCurve" "5,0,100,95"<br />
EndSection<br />
<br />
Section "InputClass"<br />
Identifier "Wacom Bamboo touch options"<br />
MatchDriver "wacom"<br />
MatchProduct "Finger"<br />
<br />
# Apply custom Options to this device below.<br />
Option "Rotate" "none"<br />
Option "ScrollDistance" "18"<br />
Option "TapTime" "220"<br />
EndSection<br />
<br />
Section "InputClass"<br />
Identifier "Wacom Bamboo pad options"<br />
MatchDriver "wacom"<br />
MatchProduct "pad"<br />
<br />
# Apply custom Options to this device below.<br />
Option "Rotate" "none"<br />
<br />
# Setting up buttons<br />
Option "Button1" "1"<br />
Option "Button2" "2"<br />
Option "Button3" "3"<br />
Option "Button4" "0"<br />
EndSection<br />
}}<br />
<br />
The identifiers can be set arbitrarily. The option names are (except for the buttons) identical to the ones listed by {{ic|xsetwacom --list parameters}} and especially also in {{ic|man wacom}}. As noted in [[#Remapping Buttons]] the button ids seem to be different than the ones for {{ic|xsetwacom}}.<br />
<br />
==== Changing orientation ====<br />
<br />
If you want to use your tablet in a different orientation you have to tell this to the driver, else the movements do not cause the expected results.<br />
This is done by setting the '''Rotate''' option for all devices. Possible orientations are '''none''','''cw''','''ccw''' and '''half'''.<br />
A quick way is e.g.<br />
$ for i in 12 13 17 18; do xsetwacom --set $i Rotate half; done # remember the ids might change when hotplugging<br />
<br />
or use the following script like this {{ic|./wacomrot.sh half}}<br />
<br />
{{hc|1=wacomrot.sh|2=<br />
#!/bin/bash<br />
device="Wacom Bamboo 16FG 4x5"<br />
stylus="$device Pen stylus"<br />
eraser="$device Pen eraser"<br />
touch="$device Finger touch"<br />
pad="$device Finger pad"<br />
<br />
xsetwacom --set "$stylus" Rotate $1<br />
xsetwacom --set "$eraser" Rotate $1<br />
xsetwacom --set "$touch" Rotate $1<br />
xsetwacom --set "$pad" Rotate $1<br />
}}<br />
<br />
==== Remapping Buttons ====<br />
<br />
It is possible to remap the buttons with hotkeys.<br />
<br />
===== Finding out the button IDs =====<br />
Sometimes it needs some trial&error to find the correct button IDs. For me they even differ for {{ic|xsetwacom}} and the {{ic|xorg.conf}} configuration. Very helpful tools are {{ic|xev}} or {{ic|xbindkeys -mk}}. An easy way to proceed is the following<br />
<br />
$ xsetwacom --get "Wacom Bamboo 16FG 4x5 Finger pad" Button 1 1<br />
$ xsetwacom --get "Wacom Bamboo 16FG 4x5 Finger pad" Button 2 2<br />
$ xsetwacom --get "Wacom Bamboo 16FG 4x5 Finger pad" Button 3 3<br />
$ # and so on<br />
<br />
Then fire up {{ic|xev}} from a terminal window, place your mouse cursor above the window and hit the buttons and write down the ids.<br />
<br />
===== The syntax =====<br />
<br />
The syntax of {{ic|xsetwacom}} is flexible but not very well documented. The general mapping syntax (extracted from the source code) for xsetwacom 0.17.0 is the following.<br />
<br />
KEYWORD [ARGS...] [KEYWORD [ARGS...] ...]<br />
<br />
KEYWORD + ARGS:<br />
key [+,-]KEY [[+,-]KEY ...] where +:key down, -:key up, no prefix:down and up<br />
button BUTTON [BUTTON ...] (1=left,2=middle,3=right mouse button, 4/5 scroll mouse wheel)<br />
modetoggle toggle absolute/relative tablet mode <br />
displaytoggle toggle cursor movement among all displays which include individual screens<br />
plus the whole desktop for the selected tool if it is not a pad.<br />
When the tool is a pad, the function applies to all tools that are asssociated<br />
with the tablet<br />
<br />
BUTTON: button ID as integer number<br />
<br />
KEY: MODIFIER, SPECIALKEY or ASCIIKEY<br />
MODIFIER: (each can be prefix with an '''l''' or an '''r''' for the left/right modifier (no prefix = left)<br />
ctrl=ctl=control, meta, alt, shift, super, hyper<br />
SPECIALKEY: f1-f35, esc=Esc, up,down,left,right, backspace=Backspace, tab, PgUp,PgDn<br />
ASCIIKEY: (usual characters the key produces, e.g. a,b,c,1,2,3 etc.)<br />
<br />
===== Some examples =====<br />
<br />
$ xsetwacom --get "Wacom Bamboo 16FG 4x5 Finger pad" Button 1 3 # right mouse button<br />
$ xsetwacom --set "Wacom Bamboo 16FG 4x5 Finger pad" Button 1 "key +ctrl z -ctrl"<br />
$ xsetwacom --get "Wacom Bamboo 16FG 4x5 Finger pad" Button 1<br />
key +Control_L +z -z -Control_L<br />
$ xsetwacom --set "Wacom Bamboo 16FG 4x5 Finger pad" Button 1 "key +shift button 1 key -shift"<br />
<br />
even little macros are possible<br />
<br />
$ xsetwacom --set "Wacom Bamboo 16FG 4x5 Finger pad" Button 1 "key +shift h -shift e l l o"<br />
<br />
{{Note|There seems to be a bug in the ''xf86-input-wacom'' driver version 0.17.0, at least for my ''Wacom Bamboo Pen & Touch'', but I guess this holds in general. It causes the keystrokes not to be overwritten correctly.<br />
$ xsetwacom --set "Wacom Bamboo 16FG 4x5 Finger pad" Button 1 "key a b c" # press button 1 -> abc<br />
$ xsetwacom --set "Wacom Bamboo 16FG 4x5 Finger pad" Button 1 "key d" # press button 1 -> dbc WRONG!<br />
<br />
A simple workaround is to reset the mapping by mapping to "":<br />
$ xsetwacom --set "Wacom Bamboo 16FG 4x5 Finger pad" Button 1 "" # to reset the mapping<br />
$ xsetwacom --set "Wacom Bamboo 16FG 4x5 Finger pad" Button 1 "key d" # press button 1 -> d<br />
<br />
}}<br />
<br />
{{Note|If you try to run a script with {{ic|xsetwacom}} commands from a udev rule, you might find that it will not work, as the wacom input devices will not be ready at the time. A workaround is to add {{ic|sleep 1}} at the beginning of your script.}}<br />
<br />
===== Execute custom commands =====<br />
<br />
Mapping custom commands to the buttons is a little bit tricky but actually very simple. First, install {{Pkg|xbindkeys}}.<br />
<br />
To get well defined button codes add the following to your permanent configuration file, e.g. {{ic|/etc/X11/xorg.conf.d/52-wacom-options.conf}}<br />
in the InputClass section of your '''pad''' device. Map the tablet's buttons to some unused button ids.<br />
<br />
# Setting up buttons (preferably choose the correct button order, so the topmost key is mapped to 10 and so on)<br />
Option "Button1" "10"<br />
Option "Button2" "11"<br />
Option "Button3" "12"<br />
Option "Button4" "13"<br />
<br />
Then restart your ''Xorg'' server and verify the buttons using {{ic|xev}} or {{ic|xbindkeys -mk}}.<br />
<br />
Now set up your xbindkeys configuration, if you do not already have one you might want to create a default configuration<br />
$ xbindkeys --defaults > ~/.xbindkeysrc<br />
<br />
Then add your custom key mapping to {{ic|~/.xbindkeysrc}}, for example<br />
<br />
"firefox"<br />
m:0x10 + b:10 (mouse)<br />
"xterm"<br />
m:0x10 + b:11 (mouse)<br />
"xdotool key ctrl-z"<br />
m:0x10 + b:12 (mouse)<br />
"send-notify Test "No need for escaping the quotes""<br />
m:0x10 + b:13 (mouse)<br />
<br />
==== LEDs ====<br />
<br />
See the [https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-driver-wacom sysfs-driver-wacom] documentation. To make changes without requiring root permissions you will likely want to create a [[udev]] rule like so:<br />
{{hc|/etc/udev/rules.d/99-wacom.rules|<nowiki><br />
# Give the users group permissions to set Wacom device LEDs.<br />
ACTION=="add", SUBSYSTEM=="hid", DRIVERS=="wacom", RUN+="/usr/bin/sh -c 'chown :users /sys/%p/wacom_led/*'"<br />
</nowiki>}}<br />
<br />
Setting the Intuos OLEDs can be done using [https://aur.archlinux.org/packages/i4oled/ i4oled] from the AUR.<br />
<br />
==== TwinView Setup ====<br />
<br />
If you are going to use two Monitors the aspect ratio while using the Tablet might feel unnatural. In order to fix this you need to add<br />
<br />
Option "TwinView" "horizontal"<br />
<br />
To all of your Wacom-InputDevice entries in the {{ic|xorg.conf}} file.<br />
You may read more about that [http://ubuntuforums.org/showthread.php?t=640898 HERE]<br />
<br />
===== Temporary TwinView Setup =====<br />
<br />
For temporary mapping of a Wacom device to a single display '''while preserving the aspect ratio''', [https://gist.github.com/Quackmatic/6c19fe907945d735c045 this script] may be used. This will letter-box the surface area of the device as required to ensure the input is not stretched on the display. This script may be executed in your {{ic|.xinitrc}} file for it to automatically run.<br />
<br />
==== Xrandr Setup ====<br />
xrandr sets two monitors as one big screen, mapping the tablet to the whole virtual screen and deforming aspect ratio.<br />
For a solution see this thread: [https://bbs.archlinux.org/viewtopic.php?pid=797617 archlinux forum].<br />
<br />
If you just want to map the tablet to one of your screens, first find out what the screens are called<br />
$ xrandr<br />
Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 16384 x 16384<br />
'''HDMI-0''' disconnected (normal left inverted right x axis y axis)<br />
'''DVI-0''' connected 1920x1080+0+0 (normal left inverted right x axis y axis) 477mm x 268mm<br />
1920x1080 60.0*+<br />
1680x1050 60.0 <br />
...<br />
'''VGA-0''' connected 1920x1080+1920+0 (normal left inverted right x axis y axis) 477mm x 268mm<br />
1920x1080 60.0*+<br />
1680x1050 60.0 <br />
...<br />
Then you need to know what is the ID of your tablet.<br />
$ xsetwacom --list devices<br />
WALTOP International Corp. Slim Tablet stylus id: '''12''' type: STYLUS<br />
<br />
In my case I want to map the tablet (ID: '''12''') to the screen on the right, which is '''VGA-0'''. I can do that with this command<br />
$ xsetwacom --set '''12''' MapToOutput '''"VGA-0"'''<br />
This should immediately work, no root necessary.<br />
<br />
If xsetwacom replies with "Unable to find an output ..." an X11 geometry string of the form '''WIDTHxHEIGHT+X+Y''' can be specified instead of the screen identifier. In this example<br />
$ xsetwacom --set '''12''' MapToOutput '''"1920x1080+1920+0"'''<br />
should also map the tablet to the screen on the right.<br />
<br />
Alternatively, you can use [https://bitbucket.org/denilsonsa/small_scripts/src/3380435f92646190f860b87f566a39d0e215034c/xsetwacom_my_preferences.sh?at=default this bash script] to quickly map the tablet to one of your screens (or the entire desktop) and fix the aspect ratio.<br />
<br />
=== Pressure curves ===<br />
<br />
Use [http://linuxwacom.sourceforge.net/misc/bezier.html Wacom Pressure Demo] to find P1=red (eg. 50,0), P2=purple (eg. 100,80) and Threshold=green (eg. 27) of your desired curve. The x-axis is the input pressure you apply to the pen; the y-axis is the output pressure the application is given. ([http://250kb.de/u/150207/p/FoS1SiXuZQRP.png example curve])<br />
<br />
You can immediately test your desired values for your device (eg. "Wacom Intuos4 6x9 stylus") with<br />
<br />
xsetwacom --set "Wacom Intuos4 6x9 stylus" PressureCurve "50" "0" "100" "80"<br />
xsetwacom --set "Wacom Intuos4 6x9 stylus" Threshold "27"<br />
<br />
Later you can apply them in {{ic|/etc/X11/xorg.conf}} as shown below or you use the above shell commands in any startup script<br />
{{hc|/etc/X11/xorg.conf|<br />
Option "PressCurve" "50,0,100,80" # Custom preference<br />
Option "Threshold" "27" # sensitivity to do a "click"<br />
}}<br />
<br />
=== Force Proportions ===<br />
<br />
For standard ('''16:9''') widescreen monitors with Wacom tablets it is a typical problem that your strokes are slightly more horizontally oriented than they physically were (so for example a perfectly drawn circle with the pen will turn into a horizontal ellipse in the computer) because the tablet drawing surface proportions are larger on the vertical axis by default ('''16:10''') than your monitors aspect ratio and this inconsistency will subtly distort your strokes. It is possible to force the proportions of the drawing surface to match the aspect ratio of your monitor to solve this problem by cutting off the bottom of the drawing surface to accommodate for the differences in vertical resolution with the below options. This is an alternative to the "Force Proportions" option in the Windows driver settings. It is generally recommended to do this to ensure maximum accuracy of your tablet input.<br />
<br />
To get the tablets default values run the following command (where "device name or ID" would be for your stylus):<br />
<br />
xsetwacom --get "device name or ID" Area<br />
<br />
After this you can figure out your tablet's resolution by dividing the values with the ratio '''11.25''' (so '''21600/11.25=1920''' and '''13500/11.25=1200'''), so to convert this to '''1920x1080''' ('''16:9''') resolution, do '''1080*11.25=12150''' then to set the proportions with xsetwacom:<br />
<br />
xsetwacom --set "device name or ID" Area 0 0 21600 12150<br />
<br />
Here is how to do the same in the xorg configuration file:<br />
<br />
Option "BottomX" "21600"<br />
Option "BottomY" "12150"<br />
<br />
(An alternative formula would would be aspect ratio multiplied by '''1350'''. So '''16:9''' is '''16*1350=21600''' and '''9*1350=12150''')<br />
<br />
{{Note|There is also a KeepShape option which reportedly should do this automatically but it does not seem to work, which is why we have to do it the hard way. I do not know whether these values should be kept the same or increased on a bigger resolution monitor, but I highly suspect that they should be kept the same (e.g. the values are relative to the tablet's resolution, not the monitor's resolution; the important part is that the aspect ratio is correct, not that the resolution is a match)}}<br />
<br />
=== Using kcm-wacomtablet ===<br />
<br />
The KDE configuration module {{AUR|kcm-wacomtablet}} (or if you're on Plasma 5, {{AUR|kcm-wacomtablet-frameworks-git}}) supports easy configuration of the tablet through a graphical user interface, allowing for different profiles and proper hotplugging support. It will auto-detect the type of your tablet, and load your configuration profile automatically when the tablet is plugged in.<br />
<br />
== Application-specific configuration ==<br />
<br />
=== GIMP ===<br />
<br />
To enabled proper usage, and pressure sensitive painting in [http://www.gimp.org GIMP], just go to ''Edit &rarr; Input Devices''. Now for each of your ''eraser'', ''stylus'', and ''cursor'' '''devices''', set the '''mode''' to ''Screen'', and remember to save.<br />
<br />
*Please take note that if present, the ''pad'' '''device''' should be kept disabled as I do not think The GIMP supports such things. Alternatively, to use such features of your tablet you should map them to keyboard commands with a program such as [http://hem.bredband.net/devel/wacom/ Wacom ExpressKeys].<br />
<br />
*You should also take note that the tool selected for the ''stylus'' is independent to that of the ''eraser''. This can actually be quite handy, as you can have the ''eraser'' set to be used as any tool you like.<br />
<br />
For more information checkout the ''Setting up GIMP'' section of [http://www.gimptalk.com/forum/topic.php?t=17992&start=1 GIMP Talk - Community - Install Guide: Getting Wacom Drawing Tablets To Work In Gimp].<br />
<br />
If the above was not enough, you may want to try setting up the tablet's stylus (and eraser) as a second mouse pointer (separating it from your mouse) by using the {{ic|xinput create-master}} and {{ic|xinput reattach}} commands. It can help when GIMP does not start painting even if the stylus touches the tablet.<br />
<br />
=== Inkscape ===<br />
<br />
As in GIMP, to do the same simply got to ''Edit &rarr; Input Devices...''. Now for each of your ''eraser'', ''stylus'', and ''cursor'' '''devices''', set the '''mode''' to ''Screen'', and remember to save.<br />
<br />
=== Krita ===<br />
<br />
If your tablet does not draw in Krita (clicks/pressure are not registered) but works in the brush selection dialog which has a small test area, try putting Krita in full-screen or canvas-only mode.<br />
<br />
Krita only requires that Qt is able to use your tablet to function properly. If your tablet is not working in Krita, then make sure to check it is working in Qt first. The effect of tablet pressure can then be tweaked in the painttop configuration, for example by selecting opacity, then selecting pressure from the drop down and adjusting the curve to your preference.<br />
<br />
=== VirtualBox ===<br />
<br />
First, make sure that your tablet works well under Arch. Then, download and install the last driver from [http://www.wacom.com/downloads/drivers.php Wacom website] on the guest OS. Shutdown the virtual machine, go to '''Settings > USB'''. Select '''Add Filter From Device''' and select your tablet (e.g. WACOM CTE-440-U V4.0-3 [0403]). Select '''Edit Filter''', and change the last item '''Remote''' to '''Any'''.<br />
<br />
=== Web Browser Plugin ===<br />
<br />
A plugin that imitates the official Wacom web plugin can be found on the AUR as [https://aur.archlinux.org/packages/wacomwebplugin/ wacomwebplugin]. It has been tested successfully using Chromium and Firefox.<br />
<br />
With this plugin it is possible to make use of online tools such as [http://sta.sh/muro/ deviantART's Muro]. This plugin is in early stages so as always, your mileage may vary.<br />
<br />
==Troubleshooting==<br />
<br />
Newer tablets' drivers might not be in the kernel yet, and additional manipulations might be needed. A notable example is the newer Intuos line of tablets (Draw/Comic/Photo).<br />
<br />
===Unknown device_type===<br />
<br />
If your tablet does not get recognized by {{ic|xsetwacom}} and {{ic|dmesg}} complains about an unknown device_type, then you need to install a patched version of input-wacom.<br />
<br />
Download and install the for-4.4 branch from [http://sourceforge.net/p/linuxwacom/input-wacom/ci/jiri/for-4.4/~/tarball SourceForge].<br />
Your device should be recognized after you run<br />
<br />
# rmmod wacom<br />
# insmod /lib/modules/YOUR_KERNEL/extra/wacom.ko.gz<br />
<br />
===System freeze===<br />
<br />
If your system freezes when your tablet gets activated by the stylus, then you will need to [[patch]] your kernel with the patch from [https://lkml.org/lkml/2015/11/20/690 LKML].<br />
<br />
== References ==<br />
*[http://sourceforge.net/apps/mediawiki/linuxwacom/index.php?title=Main_Page Linux Wacom Project Wiki]<br />
*[http://www.gimptalk.com/forum/topic.php?t=17992&start=1 GIMP Talk - Community - Install Guide: Getting Wacom Drawing Tablets To Work In Gimp]<br />
*[https://help.ubuntu.com/community/Wacom Ubuntu Help: Wacom]<br />
*[http://ubuntuforums.org/showthread.php?t=1038949 Ubuntu Forums - Install a LinuxWacom Kernel Driver for Tablet PC's]</div>Serhhttps://wiki.archlinux.org/index.php?title=Chrome_OS_devices&diff=342693Chrome OS devices2014-11-01T16:28:40Z<p>Serh: Recent versions of Chrome OS moved the set_gbb_flags.sh script.</p>
<hr />
<div>[[Category:Laptops]]<br />
[[ja:Chromebook]]<br />
{{Related articles start}}<br />
{{Related|Laptop}}<br />
{{Related|Installation guide}}<br />
{{Related|Beginners Guide}}<br />
{{Related articles end}}<br />
{{Warning|This article relies on third-party scripts and modifications, and may irreparably damage your hardware or data. Proceed at your own risk.}}<br />
This article is to provide information on how to get Arch up and running on the Chromebook series of laptops built by Acer, HP, Samsung, Toshiba, and Google. Currently overhauling all of this and trying to get more specific model pages built with uniform methods listed here. <br />
<br />
== Introduction ==<br />
<br />
=== Legacy Boot ===<br />
Newer Chromebooks features a "legacy boot" mode that makes it easy to boot Linux and other operating systems. The legacy boot mode is provided by the [http://www.coreboot.org/SeaBIOS SeaBIOS] payload of [http://www.coreboot.org/ Coreboot], which is the firmware in the Intel based Chromebook (except the first generation). SeaBIOS behaves like a traditional BIOS that boots into the MBR of a disk, and from there into your standard bootloaders like Syslinux and GRUB.<br />
<br />
On these Chromebooks that shipped with SeaBIOS, the installation process of Arch Linux should be the same with very few minor adjustments.<br />
<br />
==== Models Without SeaBIOS ====<br />
<br />
Older models, as well as some newer models, aren't shipped with SeaBIOS as part of the installed firmware. There are three approaches how to install Arch Linux on these devices:<br />
<br />
* [[Chromebook#Custom_Firmware|Flash a custom firmware with SeaBIOS]].<br />
* Take the ChrUbuntu approach which uses the Chrome OS kernel and modules.<br />
* Build and sign your own kernel, see [https://plus.google.com/+OlofJohansson/posts/34PYU79eUqP].<br />
The [[Chromebook#Installation|Installation]] process described on this page tries to cover the method of installing Arch Linux on these non SeaBIOS models by flashing a custom firmware.<br />
<br />
=== First Generation of Chromebooks ===<br />
<br />
The first generation of Chromebooks: Google Cr-48, Samsung Series 5 500 and Acer AC700 use [http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/custom-firmware#TOC-H2C Insyde H2O firmware] and not Coreboot firmware. There are three approaches how to install Arch Linux on these devices:<br />
* Flash a custom H2C firmware (only available for Google Cr-48) and install Arch as on any other UEFI laptop.<br />
* Take the ChrUbuntu approach which uses the Chrome OS kernel and modules.<br />
* Build and sign your own kernel, see [https://plus.google.com/+OlofJohansson/posts/34PYU79eUqP].<br />
<br />
=== Firmware Write Protection Intro ===<br />
<br />
All Chromebooks features a firmware write protection. It's important to be aware of it as one might need to disable the write protection as part of the installation process (to update GBB flags or flash a custom firmware).<br />
<br />
For more details see [[Chromebook#Firmware Write Protection|Firmware Write Protection]].<br />
<br />
=== Prerequisites ===<br />
<br />
* You should claim your free 100GB-1TB of Google Drive space before you install Arch. This needs to happen from ChromeOS(version > 23), not linux. This will sync/backup ChromeOS, as designed<br />
* Visit the ArchWiki page for your Chromebook, see [[Chromebook#Chromebook_Models|Chromebook Models]].<br />
* If there's no ArchWiki page for your device then before proceeding, gather information about the device and if you succeed in installing Arch Linux, then consider adding a new ArchWiki page for your model (you can use the [[Acer_C720_Chromebook|Acer C720]] as an example for device shipped with SeaBios or the [[Acer_C710_Chromebook|Acer C710]] as device that didn't shipped with it).<br />
* Read this guide completely and make sure you understand all the steps before making any changes.<br />
<br />
==Chromebook Models==<br />
<br />
=== Hardware Comparisons ===<br />
<br />
{{Warning|The availability of SeaBIOS doesn't promise device compatibility for Linux or that the pre-installed SeaBIOS works properly. Before purchasing a device visit its page on the ArchWiki and look for Linux users' posts about that model.}}<br />
<br />
<center><br />
{| class="wikitable"<br />
|-<br />
|+ style="background:#BFD7FF"| Chromebook Models<br />
|-<br />
! Available<br />
! Brand<br />
! Model<br />
! Processor<br />
! RAM<br />
! Storage<br />
! Upgradable<br />
! Screen<br />
! Resolution<br />
! Weight<br />
! SeaBIOS<br />
! Remarks<br />
|-<br />
| Dec 2010<br />
| Google <br />
| Cr-48<br />
| 1.66 GHz Intel Atom N455<br />
| rowspan="3"|2GB<br>DDR3<br />
| rowspan="4"|16GB SSD<br />
| {{G|mSATA}}<br />
| rowspan="2"|12.1 in<br>(30.7 cm)<br />
| rowspan="2"|1280x800<br>(16:10)<br />
| 3.8 lb<br>(1.7 kg)<br />
| {{R|Unavailable for<br>1st generation}}<br />
| {{G|[http://cr-48.wikispaces.com/Flash+BIOS Custom H2C<br>firmware available]}}<br />
|-<br />
| Jun 2011<br />
| Samsung<br />
| Series 5<br>XE500C21<br />
| rowspan="2"|1.66 GHz Intel Atom N570<br />
| {{G|mSATA}}<br />
| 3.06-3.26 lb<br>(1.4–1.5 kg)<br />
| {{R|Unavailable for<br>1st generation}}<br />
|<br />
|-<br />
| Jul 2011<br />
| Acer<br />
| AC700<br />
| {{G|mSATA<br>Mini}}<br />
| 11.6 in<br>(29.5 cm)<br />
| 1366x768<br>(16:9)<br />
| 3.19 lb<br>(1.4 kg)<br />
| {{R|Unavailable for<br>1st generation}}<br />
|<br />
|-<br />
| May 2012<br />
| rowspan="2"|Samsung<br />
| Series 5<br>XE550C22<br />
| 1.3 GHz Intel Celeron 867<br>1.6 Ghz Intel Core i5 2467M<br />
| 4GB<br>DDR3<br />
| {{G|mSATA}}<br />
| 12.1 in<br>(30.7 cm)<br />
| 1280x800<br>(16:10)<br />
| 3.3 lb<br>(1.5 kg)<br />
| {{R|In custom<br>firmware only}}<br />
|<br />
|-<br />
| Oct 2012<br />
| [[Samsung_Chromebook_(ARM)|Series 3<br>XE303C12]]<br />
| 1.7 GHz Samsung Exynos 5250<br />
| 2GB<br>DDR3<br />
| 16GB eMMC<br />
| {{No}}<br />
| rowspan="2"|11.6 in<br>(29.5 cm)<br />
| rowspan="4"|1366x768<br>(16:9)<br />
| 2.43 lb<br>(1.1 kg)<br />
| {{R|Unavailable <br>on ARM}}<br />
| {{G|[http://archlinuxarm.org/platforms/armv7/samsung/samsung-chromebook Supported by<br>Arch Linux ARM]}}<br />
|-<br />
| Nov 2012<br />
| Acer<br />
| [[Acer_C710_Chromebook|C710]]<br />
| 1.1 GHz Intel Celeron 847<br>1.5 GHz Intel Celeron 1007U<br />
| rowspan="2"|2-4GB<br>DDR3<br />
| rowspan="2"|320GB HDD<br>16GB SSD<br />
| {{G|SATA<br>2.5" 7,9.5mm}}<br />
| 3-3.05 lb<br>(1.4 kg)<br />
| {{R|In custom<br>firmware only}}<br />
| <br />
|-<br />
| rowspan="3"|Feb 2013<br />
| HP<br />
| Pavilion 14<br>Chromebook<br />
| 1.1 GHz Intel Celeron 847<br />
| {{G|SATA<br>2.5" 7,9.5mm}}<br />
| 14 in<br>(35.6 cm)<br />
| 3.96 lb<br>(1.8 kg)<br />
| {{R|In custom<br>firmware only}}<br />
| [http://h10032.www1.hp.com/ctg/Manual/c03735120.pdf Service Manual]<br />
|-<br />
| Lenovo<br />
| ThinkPad X131e<br>Chromebook<br />
| 1.5 GHz Intel Celeron 1007U<br />
| 4GB<br>DDR3<br />
| 16GB SSD<br />
| {{G|mSATA}}<br />
| 11.6 in<br>(29.5 cm)<br />
| 3.92 lb<br>(1.8 kg)<br />
| {{R|In custom<br>firmware only}}<br />
|<br />
|-<br />
| Google<br />
| Chromebook<br>Pixel<br />
| 1.8 GHz Intel Core i5 3427U<br />
| 4GB<br>DDR3<br />
| 32GB iSSD<br>64GB iSSD<br />
| {{No}}<br />
| 12.85 in<br>(32.6 cm)<br />
| 2560x1700<br>(3:2)<br />
| 3.35 lb<br>(1.5 kg)<br />
| {{Yes}}<br />
|<br />
|-<br />
| Oct 2013<br />
| rowspan="2"|HP<br />
| Chromebook 11<br />
| 1.7 GHz Samsung Exynos 5250<br />
| 2GB<br>DDR3<br />
| 16GB eMMC<br />
| {{No}}<br />
| 11.6 in<br>(29.5 cm)<br />
| rowspan="9"|1366x768<br>(16:9)<br />
| 2.3 lb<br>(1.04 kg)<br />
| {{R|Unavailable <br>on ARM}}<br />
| {{R|Unsupported by<br>Arch Linux ARM}}<br />
|-<br />
| rowspan="2"|Nov 2013<br />
| [[HP_Chromebook_14|Chromebook 14]]<br />
| 1.4 GHz Intel Celeron 2955U<br />
| rowspan="2"|2GB DDR3<br>4GB DDR3<br />
| rowspan="2"|16GB SSD<br>32GB SSD<br />
| {{G|42mm M.2<br>NGFF}}<br />
| 14 in<br>( 35.6 cm)<br />
| 4.07 lb<br>(1.84 kg)<br />
| {{Yes}}<br />
|<br />
|-<br />
| Acer<br />
| [[Acer_C720_Chromebook|C720/C720P<br>Chromebook]]<br />
| 1.4 GHz Intel Celeron 2955U<br>1.7 GHz Intel Core i3-4005U<br />
| {{G|42mm M.2<br>NGFF}}<br />
| 11.6 in<br>(29.5 cm)<br />
| 2.76 lb<br>(1.25 kg)<br />
| {{Yes}}<br />
|<br />
|-<br />
| Jan 2014<br />
| Toshiba<br />
| CB30/CB35<br>Chromebook<br />
| 1.4 GHz Intel Celeron 2955U<br />
| 2GB DDR3<br />
| 16GB eMMC<br />
| {{No}}<br />
| 13.3 in<br>(33.8 cm)<br />
| 3.3 lb<br>(1.5 kg)<br />
| {{Yes}}<br />
|<br />
|-<br />
| Apr 2014<br />
| Dell<br />
| [[Dell Chromebook 11|Chromebook 11]]<br />
| 1.4 GHz Intel Celeron 2955U<br>Intel Core i3<br />
| 2GB DDR3<br>4GB DDR3<br />
| 16GB<br />
| {{No}}<br />
| 11.6 in<br>(29.5 cm)<br />
| 2.9 lb<br>(1.31 kg)<br />
| {{Yes}}<br />
| Requires stock<br>SeaBIOS patching<br />
|-<br />
| rowspan="5"|Jun 2014<br />
| Lenovo<br />
| N20/N20P<br>Chromebook<br />
| rowspan="2"|2.1 GHz Intel BayTrail-M N2830<br />
| 2GB DDR3<br />
| 16GB eMMC<br />
| {{No}}<br />
| 11.6 in<br>(29.5 cm)<br />
| 2.86 lb<br>(1.3 kg)<br />
| Unknown<br />
|<br />
|-<br />
| Asus<br />
| Chromebook <br>C200/C300<br />
| 2GB DDR3<br>4GB DDR3<br />
| 16GB eMMC<br>32GB eMMC<br />
| {{No}}<br />
| 11.6 in<br>(29.5 cm)<br>13.3 in<br>(33.8 cm)<br />
| 2.5 lb<br>(1.13 kg)<br>3.1 lb<br>(1.4 kg)<br />
| {{No}}<br />
| Custom<br>ROM needed<br>[https://bbs.archlinux.org/viewtopic.php?pid=1448776#p1448776]<br />
|-<br />
| rowspan="2"|Lenovo<br />
| ThinkPad 11e<br>Chromebook<br />
| rowspan="2"|1.83 GHz Intel BayTrail-M N2930<br />
| rowspan="4"|4GB DDR3<br />
| rowspan="3"|16GB eMMC<br />
| {{No}}<br />
| rowspan="2"|11.6 in<br>(29.5 cm)<br />
| rowspan="2"|3.1 lb<br>(1.4 kg)<br />
| rowspan="2"|Unknown<br />
|<br />
|-<br />
| ThinkPad Yoga 11e<br>Chromebook<br />
| {{No}}<br />
|<br />
|-<br />
| Samsung<br />
| Chromebook 2<br>XE503C12/C32<br />
| 1.9 GHz Exynos 5 Octa 5420<br>2 GHz Exynos 5 Octa 5800<br />
| {{No}}<br />
| 11.6 in<br>(29.5 cm)<br>13.3 in<br>(33.8 cm)<br />
| 1366x768<br>(16:9)<br>1920x1080<br>(16:9)<br />
| 2.65 lb<br>(1.2 kg)<br>3.06 lb<br>(1.39 kg)<br />
| {{R|Unavailable <br>on ARM}}<br />
| {{G|[http://archlinuxarm.org/platforms/armv7/samsung/samsung-chromebook-2 Supported by<br>Arch Linux ARM]}}<br />
|-<br />
| Jul 2014<br />
| HEXA<br />
| Chromebook Pi<br />
| 2.1 GHz Intel BayTrail-M N2830<br />
| 32GB eMMC<br />
| {{No}}<br />
| 11.6 in<br>(29.5 cm)<br />
| 1366x768<br>(16:9)<br />
| 2.6 lb<br>(1.18 kg)<br />
| Unknown<br />
|<br />
|-<br />
| Aug 2014<br />
| Acer<br />
| CB5-311<br>Chromebook 13<br />
| 2.1 GHz Nvidia Tegra K1<br />
| rowspan="2"|2GB DDR3<br>4GB DDR3<br />
| 16GB eMMC<br>32GB eMMC<br />
| {{No}}<br />
| rowspan="2"|13.3 in<br>(33.8 cm)<br />
| rowspan="2"|1366x768<br>(16:9)<br>1920x1080<br>(16:9)<br />
| 3.3 lb<br>(1.5 kg)<br />
| {{R|Unavailable <br>on ARM}}<br />
| {{R|Unsupported by<br>Arch Linux ARM}}<br />
|-<br />
| rowspan="2"|Sep 2014<br />
| Toshiba<br />
| CB35<br>Chromebook 2<br />
| 2.16 GHz Intel BayTrail-M N2840<br />
| 16GB<br />
| Unknown<br />
| 2.96 lb<br>(1.34 kg)<br />
| Unknown<br />
|<br />
|-<br />
| Acer<br />
| CB3-111<br>Chromebook 11<br />
| 2.1 GHz Intel BayTrail-M N2830<br />
| 2GB DDR3<br />
| 16GB eMMC<br />
| {{No}}<br />
| 11.6 in<br>(29.5 cm)<br />
| 1366x768<br>(16:9)<br />
| 2.4 lb<br>(1.09 kg)<br />
| Unknown<br />
|<br />
|-<br />
| rowspan="3"|Oct 2014<br />
| rowspan="2"|HP<br />
| Chromebook 14<br>G3<br />
| 2.1 GHz Nvidia Tegra K1<br />
| rowspan="2"|2GB DDR3<br>4GB DDR3<br />
| 16GB eMMC<br>32GB eMMC<br />
| {{No}}<br />
| 14 in<br>(35.6 cm)<br />
| 1366x768<br>(16:9)<br>1920x1080<br>(16:9)<br />
| 3.79 lb<br>(1.72 kg)<br />
| {{R|Unavailable <br>on ARM}}<br />
| {{R|Unsupported by<br>Arch Linux ARM}}<br />
|-<br />
| Chromebook 11<br>G3<br />
| rowspan="2"|2.16 GHz Intel BayTrail-M N2840<br />
| rowspan="2"|16GB eMMC<br />
| {{No}}<br />
| rowspan="2"|11.6 in<br>(29.5 cm)<br />
| rowspan="2"|1366x768<br>(16:9)<br />
| 2.8 lb<br>(1.28 kg)<br />
| Unknown<br />
|<br />
|-<br />
| Samsung<br />
| Chromebook 2<br>XE500C12<br />
| 2GB DDR3<br />
| {{No}}<br />
| 2.65 lb<br>(1.2 kg)<br />
| Unknown<br />
|<br />
|}<br />
</center><br />
<br />
== Installation ==<br />
<br />
{{Warning|Installation on Chromebooks that don't ship with SeaBIOS requires flashing a custom firmware, a process that may brick your device. Proceed at your own risk.}}<br />
<br />
{{Note|While the following information should fit all the Chromebooks with Coreboot firmware (shipped with SeaBIOS payload or without), it's possible that with some models you may need to make further adjustments.}}<br />
<br />
The general installation procedure:<br />
* Enable developer mode.<br />
* Chromebook with SeaBIOS:<br />
** Enable legacy boot / SeaBIOS.<br />
** Set SeaBIOS as default (optional but recommended, requires disabling the write protection).<br />
* Chromebook without SeaBIOS:<br />
** Flash a custom firmware.<br />
* [[Chromebook#Preparing_the_installation_media|Prepare the installation media]], another Linux machine may be needed to manually create the 64-bit media.<br />
* Boot Arch Linux installation media and install Arch.<br />
<br />
=== Enabling Developer Mode ===<br />
<br />
[http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook#TOC-Developer-Mode Developer Mode] is necessary in order to access the superuser shell inside Chrome OS, which is required for making changes to the system like allow booting through SeaBIOS.<br />
<br />
{{Warning|Enabling Developer Mode will wipe all of your data.}}<br />
<br />
To enable Developer Mode: <br />
<br />
* Turn on the Chromebook.<br />
* Press and hold the {{ic|Esc + F3 (Refresh)}} keys, then press the {{ic|Power}} button. This enters Recovery Mode.<br />
* Press {{ic|Ctrl + D}} (no prompt). It will ask you to confirm, then the system will revert its state and enable Developer Mode.<br />
{{Note|Press {{ic|Ctrl + D}} (or wait 30 seconds for the beep and boot) at the white boot splash screen to enter Chrome OS.}}<br />
<br />
=== Accessing the superuser shell ===<br />
<br />
After you have enabled the Developer Mode you will need to access the superuser shell. How you do this depends on whether you've configured Chrome OS or not.<br />
<br />
==== Accessing the Superuser shell without Chrome OS configuration ====<br />
<br />
If you haven't configured Chrome OS, just press {{ic|Ctrl + Alt + F2}} (F2 is the "forward" arrow on the top row, →), you'll see a login prompt.<br />
<br />
* Use {{ic|chronos}} as the username, it should not prompt you for a password.<br />
* Become superuser with {{ic|sudo bash}}.<br />
<br />
==== Accessing the superuser shell with Chrome OS configuration ====<br />
<br />
If you have configured Chrome OS already:<br />
<br />
* Open a crosh window with {{ic|Ctrl + Alt + T}}.<br />
* Open a bash shell with the {{ic|shell}} command.<br />
* Become superuser with {{ic|sudo bash}}<br />
<br />
=== Enabling SeaBIOS ===<br />
<br />
If your Chromebook didn't ship with SeaBIOS or you prefer to install a custom firmware, then continue to [[Chromebook#Custom Firmware|Custom Firmware]].<br />
<br />
This method will allow you to access the pre-installed version of SeaBIOS through the Developer Mode screen in Coreboot.<br />
<br />
* Inside your superuser shell enter:<br />
# crossystem dev_boot_usb=1 dev_boot_legacy=1<br />
* Reboot the machine.<br />
<br />
You can now start SeaBIOS by pressing {{ic|Ctrl + L}} at the white boot splash screen.<br />
<br />
{{Note|If you intend to stay using pre-installed SeaBIOS route and think you won't appreciate having to press {{ic|Ctrl + L}} every time you boot to reach SeaBIOS then you can set Coreboot to boot to SeaBIOS by default. This currently must be done inside of Chrome OS and requires disabling the write protection (hardware and software), it might be a good idea to do this now so that you will not have to re-install Chrome OS later with recovery install media. If you're choosing to keep Chrome OS (installing Arch on external storage or [[Chromebook#Alternative_Installation.2C_Install_Arch_Linux_in_addition_to_Chrome_OS|on the internal storage side by side with Chrome OS]] then set SeaBIOS to default later.}}<br />
<br />
You should now have SeaBIOS enabled on your Chromebook, if you choose to not set it as default then you can continue to [[Chromebook#Installing Arch Linux|Installing Arch Linux]].<br />
<br />
==== Boot to SeaBIOS by default ====<br />
<br />
To boot SeaBIOS by default, you will need to run [https://chromium.googlesource.com/chromiumos/platform/vboot_reference/+/master/scripts/image_signing/set_gbb_flags.sh {{ic|set_gbb_flags.sh}}] in Chrome OS (already included in Chrome OS, it won't work correctly in Arch Linux).<br />
<br />
{{Warning|If you do not set the GBB flags then your system might become corrupted on empty battery, Chrome OS will be forced to recover and you will lose your Arch Linux installation on the internal storage.}}<br />
<br />
{{Warning|If you do not disable the write protection before setting the GBB flags you endanger wiping out the RW-LEGACY part of the firmware (i.e. SeaBIOS) and your system might not boot (should be recoverable with Chrome OS recovery media). Updated versions of [https://chromium.googlesource.com/chromiumos/platform/vboot_reference/+/master/scripts/image_signing/set_gbb_flags.sh {{ic|set_gbb_flags.sh}}] won't let you set the GBB flags without disabling the write protection.}}<br />
<br />
* Disable the hardware write protection.<br />
See the [[Chromebook#Disabling the Hardware Write Protection|Disabling the Hardware Write Protection]] at the [[Chromebook#Firmware Write Protection|Firmware Write Protection]] topic.<br />
<br />
* Inside your superuser shell enter:<br />
# sudo su<br />
<br />
* Disable the software write protection.<br />
# flashrom --wp-disable<br />
<br />
* Check that write protection is disabled.<br />
# flashrom --wp-status<br />
<br />
* Run {{ic|set_gbb_flags.sh}} with no parameters.<br />
# set_gbb_flags.sh<br />
<br />
{{Note|Recent versions of Chrome OS have moved the script to /usr/share/vboot/bin/set_gbb_flags.sh which isn't in $PATH by default.}}<br />
<br />
* Make sure you get the following output, see [https://johnlewis.ie/how-to-make-seabios-the-default-on-your-acer-c720/].<br />
GBB_FLAG_DEV_SCREEN_SHORT_DELAY 0x00000001<br />
GBB_FLAG_FORCE_DEV_SWITCH_ON 0x00000008<br />
GBB_FLAG_FORCE_DEV_BOOT_LEGACY 0x00000080<br />
GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY 0x00000400<br />
<br />
* Now set SeaBIOS as default.<br />
# set_gbb_flags.sh 0×489<br />
<br />
* Enable back the software write protection.<br />
# flashrom --wp-enable<br />
<br />
Your Chromebook now will boot to SeaBIOS by default, you can continue to [[Chromebook#Installing Arch Linux|Installing Arch Linux]], if your device is booting correctly then you should re-enable the hardware write protection.<br />
<br />
=== Flashing Custom Firmware ===<br />
<br />
Follow the [[Chromebook#Custom Firmware|Custom Firmware]] topic which explains how to flash a custom firmware.<br />
<br />
After flashing the firmware you can continue to [[Chromebook#Installing Arch Linux|Installing Arch Linux]].<br />
<br />
=== Installing Arch Linux ===<br />
<br />
==== Preparing the installation media ====<br />
<br />
===== 32-bit installation =====<br />
<br />
Create an [https://wiki.archlinux.org/index.php/USB_Flash_Installation_Media Arch Linux Installer USB drive].<br />
<br />
===== 64-bit installation =====<br />
<br />
{{Note|Due to a bug ({{Bug|40637}}) in recent versions of the 64-bit Arch Linux Install Medium (after 2013.10.01), a 64-bit installation with the official image is not currently possible. The instructions below outline a method of modifying the image so that it will boot properly and a 64-bit installation can be performed.}}<br />
<br />
Create a new FAT32 partition on your USB drive e.g. with gparted and '''label it as''' {{ic|ArchLinux}}.<br />
<br />
{{Warning|Without the label it won't work}}<br />
<br />
*Mount the new partition (replace x with the correct letter as shown with sudo fdisk -l and username with your own username)<br />
<br />
# mount /dev/sdx1 /mnt/ -o uid=username,gid=users<br />
<br />
Install GRUB2 on the USB drive<br />
<br />
# grub-install --no-floppy --root-directory=/mnt /dev/sdx<br />
<br />
Create a new directory in /mnt/boot where 'YYYYMMDD' is the year, month, and day, of the ISO being used, respectively<br />
<br />
# /mnt/boot/archlinux-YYYYMMDD-dual<br />
<br />
Mount the ISO<br />
<br />
$ mkdir ~/iso<br />
# mount -o loop archlinux-YYYY.MM.DD-dual.iso ~/iso<br />
<br />
Copy the mounted files to the usb drive<br />
<br />
$ cp -r ~/iso/arch/* /mnt/boot/archlinux-YYYYMMDD-dual<br />
<br />
Create the grub.cfg file<br />
<br />
{{hc|head=/mnt/boot/grub/grub.cfg|<br />
output=menuentry "Arch Linux 64 Bit" {<br />
linux /boot/archlinux-YYYYMMDD-dual/boot/x86_64/vmlinuz archisobasedir=/boot/archlinux-YYYYMMDD-dual archisolabel=ArchLinux<br />
initrd /boot/archlinux-YYYYMMDD-dual/boot/x86_64/archiso.img<br />
}<br />
}}<br />
<br />
==== Booting the installation media ====<br />
<br />
* Plug the USB drive to the Chromebook and start SeaBIOS with {{ic|Ctrl + L}} at the white boot splash screen (if SeaBIOS isn't set as default).<br />
* Press {{ic|Esc}} to get a boot menu and select the number corresponding to your USB drive.<br />
<br />
The Arch Linux installer boot menu should appear and the installation process can [[Beginners%27_Guide#Installation|proceed as normal]].<br />
<br />
{{Note|For now choose [[Beginners' guide#GRUB|GRUB]] as your bootloader, you can choose MBR or GPT partitioning schemes, if you choose GPT then don't forget to add a [[Beginners' guide#GRUB|BIOS Boot Partition]]. Also see [[Chromebook#Syslinux|Known Issues]].}}<br />
<br />
After finishing installing Arch Linux continue by following the [[Chromebook#Post_Installation_Configuration|Post Installation Configuration]].<br />
<br />
==== Alternative Installation, Install Arch Linux in addition to Chrome OS ====<br />
<br />
{{Poor writing|needs more details and convert the use of the script to manually re-partitioning steps with cgpt}}<br />
<br />
It's possible to have both Arch Linux and Chrome OS installed on the internal drive.<br />
<br />
===== Re-Partition the Drive =====<br />
<br />
In order to partition the drive, we will run the first stage of the ChruBuntu script in Chrome OS. After logging it, open a shell with {{ic|Ctrl + Alt + T}}, run {{ic|shell}}, then {{ic|cd ~/}} to enter the home directory. Once there, run the following:<br />
<br />
curl -L -O http://goo.gl/9sgchs; sudo bash 9sgchs<br />
<br />
It will ask how much space to partition for the alternate partition. 8GB is a safe number for the 16GB SSD. More than 9 may not work.<br />
<br />
===== Fixing the Filesystem =====<br />
<br />
Reboot the system so Chrome OS will repair the filesystem after the previous re-partitioning process.<br />
Once this is done, verify that the disk space has been reduced by opening a file manager and clicking the gear in the top right of the window.<br />
<br />
===== Continue the Installation Process =====<br />
<br />
[[Chromebook#Installing Arch Linux|Continue the installation process]] but instead of wiping the internal drive and creating a new filesystem you should install Arch to the existing empty partition that we designated for Arch in the previous step.<br />
<br />
So after booting the installation media:<br />
<br />
* Run the command {{ic|fdisk -l}} to list drives and partitions. Find the internal drive and note the name of the partition matching the size you specified in the ChrUbuntu script.<br />
* Use {{ic|mkfs.ext4 /dev/sdxY}} (where xY is drive letter and partition number, eg. /dev/sda7) This will create the filesystem for arch.<br />
* Following the [https://wiki.archlinux.org/index.php/GRUB2#GUID_Partition_Table_.28GPT.29_specific_instructions instructions for installing GRUB on GPT], use gdisk to create a 1007kb partition and set the type to EF02.<br />
<br />
{{Note|Contrary to what some people say, the grub partition does NOT need to be the first partition on the disk. The existing ChromeOS partitions make this difficult to do anyways.}}<br />
<br />
===== Choosing Between Arch Linux to Chrome OS =====<br />
<br />
Reboot you system and press {{ic|Ctrl + l}} to boot load SeaBIOS and boot Arch or {{ic|Ctrl + d}} to boot ChromeOS.<br />
<br />
Now you can also [[Chromebook#Boot_to_SeaBIOS_by_default|set SeaBIOS as default]] (or even later as you are keeping Chrome OS).<br />
<br />
== Post Installation Configuration ==<br />
<br />
=== Patched Kernels ===<br />
<br />
{{AUR|linux-chromebook}} and {{AUR|linux-mainline-chromebook}} includes different patches which didn't accepted yet to Linux's upstream sources for better support [[Chromebook]] models, this includes:<br />
* Touchpad and touchscreen driver support.<br />
* TPM related fixes, will save from setting a kernel module parameter for proper recovery from suspend with stock firmware.<br />
* Log level adjustment, will limit the extra noise in your log.<br />
These packages will limit the extra configuration needed and also save you from manually building and installing different modules.<br />
<br />
It is advised to review the list of patches and decide if the packages needed as the list is slowly getting smaller while the patches being accepted to the upstream sources.<br />
<br />
==== Installing the patched kernel package ====<br />
<br />
* [[Arch_User_Repository#Installing_packages|Build from AUR]] or [https://drive.google.com/folderview?id=0B_be4ZpoKHDiMEFsX2c0c09Ha0E download pre-built packages] (if you're using [[Yaourt]] then you probably want to point {{ic|TMPDIR}} in {{ic|/etc/yaourtrc}} to somewhere else than {{ic|/tmp}}).<br />
* You might want to remove {{Pkg|linux}} package.<br />
# pacman -R linux<br />
* [[Arch_User_Repository#Installing_packages|Install]] the patched kernel package.<br />
# pacman -U linux*chromebook*.pkg.tar.xz<br />
* [[GRUB#Generating_main_configuration_file|Rebuild your grub config]].<br />
<br />
=== Video Driver ===<br />
<br />
See [[Intel Graphics]].<br />
<br />
=== Touchpad and Touchscreen kernel modules ===<br />
<br />
Since kernel 3.17 all the related patches merged into the upstream sources, meaning the {{Pkg|linux}} package in core supports these devices.<br />
<br />
If your touchpad or touchscreen is not supported then review the list of patches in {{Aur|linux-chromebook}} or {{AUR|linux-mainline-chromebook}}, if a related patch for your Chromebook model exist then [[Chromebook#Patched_Kernels|install one of these packages ]]. If there's no such patch don't worry as the developers should be able to add such patch by request as the Chromium OS sources includes the related changes and are open source.<br />
<br />
=== Fixing suspend ===<br />
{{Note|Lid suspend might not work directly after boot, you might need to wait a little.}}<br />
<br />
The following are instructions to fix the suspend functionality.<br />
Depending if you use the pre-installed SeaBIOS or John Lewis' pre-built custom ROMs with {{AUR|linux-chromebook}} you might not need the following fix.<br />
With the recent 3.17 kernel the suspend fix still needed.<br />
<br />
There have been a few alternatives discussed and those may work better for some. [https://bbs.archlinux.org/viewtopic.php?pid=1364376#p1364376] [https://bbs.archlinux.org/viewtopic.php?pid=1364521#p1364521]<br />
<br />
When using the stock coreboot included on Haswell Chromebooks, the general idea is to disable the EHCI_PCI and TPM modules, which cause the suspend/resume cycle to fail. There are multiple ways to achieve this.<br />
<br />
==== With a patched kernel ====<br />
<br />
Install a [[Chromebook#Patched_Kernels|Patched Kernel]] which provides these fixes without the need for any additional kernel parameters.<br />
<br />
==== With kernel parameters ====<br />
<br />
Add the following to your GRUB configuration<br />
<br />
{{hc|head=/etc/default/grub|<br />
output=GRUB_CMDLINE_LINUX_DEFAULT="tpm_tis.interrupts=0 modprobe.blacklist=ehci_pci"}}<br />
<br />
Then [[GRUB#Generating main configuration file|rebuild your grub config]].<br />
<br />
==== With systemd ====<br />
<br />
Create the following {{ic|cros-acpi-wakeup.conf}} file.<br />
<br />
{{hc|head=/etc/tmpfiles.d/cros-acpi-wakeup.conf|<br />
output=w /proc/acpi/wakeup - - - - EHCI<br />
w /proc/acpi/wakeup - - - - HDEF<br />
w /proc/acpi/wakeup - - - - XHCI<br />
w /proc/acpi/wakeup - - - - LID0<br />
w /proc/acpi/wakeup - - - - TPAD<br />
w /proc/acpi/wakeup - - - - TSCR}}<br />
<br />
Add the following line at the end of {{ic|/etc/rc.d/rc.local}} (if it does not exist, just create it) to prevent bad handling of EHCI USB:<br />
<br />
{{hc|head=/etc/rc.d/rc.local|<br />
output=<nowiki><br />
echo 1 > /sys/devices/pci0000\:00/0000\:00\:1d.0/remove<br />
</nowiki>}}<br />
<br />
Then, create the following {{ic|cros-sound-suspend.sh}} file. Only the Ath9k binding/unbinding lines are listed below; see the alternatives linked above for additional sound suspend handling if you experience issues.<br />
<br />
{{hc|head=/usr/lib/systemd/system-sleep/cros-sound-suspend.sh|<br />
output=<nowiki>#!/bin/bash<br />
<br />
case $1/$2 in<br />
pre/*)<br />
# Unbind ath9k for preventing error and full sleep mode (wakeup by LID after hibernating) <br />
echo -n "0000:01:00.0" | tee /sys/bus/pci/drivers/ath9k/unbind<br />
# Unbind snd_hda_intel for sound<br />
echo -n "0000:00:1b.0" | tee /sys/bus/pci/drivers/snd_hda_intel/unbind<br />
echo -n "0000:00:03.0" | tee /sys/bus/pci/drivers/snd_hda_intel/unbind<br />
;;<br />
post/*)<br />
# Bind ath9k for preventing error and and full sleep mode (wakeup by LID after hibernating) <br />
echo -n "0000:01:00.0" | tee /sys/bus/pci/drivers/ath9k/bind<br />
# bind snd_hda_intel for sound<br />
echo -n "0000:00:1b.0" | tee /sys/bus/pci/drivers/snd_hda_intel/bind<br />
echo -n "0000:00:03.0" | tee /sys/bus/pci/drivers/snd_hda_intel/bind<br />
;;<br />
esac</nowiki>}}<br />
<br />
Make sure to make the script executable:<br />
# chmod +x /usr/lib/systemd/system-sleep/cros-sound-suspend.sh<br />
<br />
This method also requires the {{ic|1=tpm_tis.interrupts=0}} kernel parameter in your GRUB configuration.<br />
<br />
{{hc|head=/etc/default/grub|<br />
output=GRUB_CMDLINE_LINUX_DEFAULT="quiet tpm_tis.interrupts=0"}}<br />
<br />
Then [[GRUB#Generating main configuration file|rebuild your grub config]].<br />
<br />
=== Fixing Audio ===<br />
<br />
One or more of followings might help solving audio related issues, setting {{ic|snd_hda_intel}} module index reported the most useful. It's highly possible that you won't need to make any change.<br />
<br />
* Create <code>/etc/modprobe.d/alsa.conf</code>, the option {{ic|index}} will make sure the analog output is the default (and not HDMI), the option {{ic|model}} will notify the driver our board model which will make the built-in microphone usable (you can try instead {{ic|<nowiki>model=alc283-sense-combo</nowiki>}}). <br />
<br />
{{hc|head=/etc/modprobe.d/alsa.conf|<br />
output=options snd_hda_intel index=1 model=alc283-dac-wcaps}}<br />
<br />
* Create this specific <code>~/.asoundrc</code> file<br />
<br />
{{hc|~/.asoundrc|<br />
# Standard<br />
pcm.!default {<br />
type hw<br />
card 1<br />
device 0<br />
}<br />
<br />
ctl.!default {<br />
type hw<br />
card 1<br />
}<br />
<br />
pcm_slave.slavej {<br />
pcm "hw:1"<br />
channels 2<br />
rate 44100<br />
}<br />
<br />
pcm.plugj {<br />
type plug<br />
slave slavej<br />
}<br />
<br />
# HDMI<br />
#pcm.!default {<br />
#type hw<br />
#card 1<br />
#device 3<br />
#}<br />
<br />
#ctl.!default {<br />
#type hw<br />
#card 0<br />
#}<br />
<br />
}}<br />
<br />
* To fix FlashPlugin audio with PulseAudio use this specific <code>.asoundrc</code> file<br />
<br />
{{hc|~/.asoundrc|<br />
# Standard<br />
pcm.pulse {<br />
type pulse<br />
}<br />
<br />
ctl.pulse {<br />
type pulse<br />
}<br />
pcm.!default {<br />
type pulse<br />
# type hw<br />
# card 1<br />
# device 0<br />
}<br />
<br />
ctl.!default {<br />
type pulse<br />
# type hw<br />
#card 1<br />
}<br />
<br />
pcm_slave.slavej {<br />
pcm "hw:1"<br />
channels 2<br />
rate 44100<br />
}<br />
<br />
pcm.plugj {<br />
type plug<br />
slave slavej<br />
}<br />
<br />
# HDMI<br />
#pcm.!default {<br />
#type hw<br />
#card 1<br />
#device 3<br />
#}<br />
<br />
#ctl.!default {<br />
#type hw<br />
#card 0<br />
#}<br />
<br />
}}<br />
<br />
=== Touchpad Configuration ===<br />
<br />
There are few options how to set the touchpad:<br />
<br />
* Visit the ArchWiki page for your Chromebook model (see [[Chromebook#Chromebook_Models|Chromebook Models]]) for touchpad xorg.conf.d file.<br />
* Use a [[Touchpad_Synaptics#Configuration_on_the_fly|touchpad configuration tool]] like [[Touchpad_Synaptics#Graphical_tools | Synaptiks]] for [[KDE]], although it is said to be currently unmaintained and seems to crash under KDE 4.11, it works well with KDE 4.12.2. Another utility, {{AUR|kcm_touchpad}}, does not work at all.<br />
<br />
See also:<br />
* [https://chromium.googlesource.com/chromiumos/platform/xorg-conf/ Touchpad config files for Chromium OS], you can find out your touchpad model by running {{ic|cat /proc/bus/input/devices}}.<br />
* [https://github.com/hugegreenbug/xf86-input-cmt Chromium OS touchpad driver port for Linux].<br />
<br />
=== Hotkeys ===<br />
<br />
[https://support.google.com/chromebook/answer/1047364?hl=en The Chromebook function keys] recognized as standard F1-F10 by the kernel, it's preferable to map them accordingly to their appearance. It would also be nice to get the keys {{ic|Delete, Home, End, PgUp, PgDown}} which in Chrome OS mapped to {{ic|Alt + : BackSpace, Right, Left, Up, Down}}.<br />
<br />
==== Sxhkd configuration ====<br />
<br />
One way to set the hotkeys would be by using the [[Sxhkd]] daemon. Besides {{AUR|sxhkd}}, this also requires [[Advanced Linux Sound Architecture|amixer]], {{Pkg|xorg-xbacklight}}, and {{Pkg|xautomation}}.<br />
<br />
* See [https://gist.github.com/dhead666/191722ec04842d8d330b] for an example configuration in {{ic|~/.config/sxhkd/sxhkdrc}}.<br />
<br />
==== Xbindkeys configuration ====<br />
<br />
Another way to configure hotkeys would be by using [[Xbindkeys]]. Besides {{Pkg|xbindkeys}} this requires [[Advanced Linux Sound Architecture|amixer]] and {{Pkg|xorg-xbacklight}} and {{Pkg|xvkbd}}.<br />
<br />
* See [https://gist.github.com/dhead666/08562a9a760b18b6e758] for an example configuration in {{ic|~/.xbindkeysrc}}.<br />
* See [https://bbs.archlinux.org/viewtopic.php?id=173418&p=3 vilefridge's xbindkeys configuration] for another example.<br />
<br />
===== Alternate xbindkeys configuration =====<br />
<br />
[http://pastie.org/9550960 Volchange] (originated in the [http://www.debianuserforums.org/viewtopic.php?f=55&t=1453#p14351 Debian User Forums])) can manipulate the volume with PulseAudio instead of using [[Advanced Linux Sound Architecture|amixer]]. Besides [http://pastie.org/9550960 Volchange] this requires {{Pkg|xorg-xbacklight}} and {{Pkg|xvkbd}}.<br />
<br />
* Download the script from [http://pastie.org/9550960].<br />
* Make it executable <br />
$ chmod u+x ~/.local/bin/volchange<br />
<br />
See [https://gist.github.com/dhead666/4e23b506441ad424e26e] for a matching {{ic|~/.xbindkeysrc}}.<br />
<br />
==== Patch xkeyboard-config ====<br />
<br />
Another option is to install {{AUR|xkeyboard-config-chromebook}}, for more details visit [https://github.com/dhead666/archlinux-pkgbuilds/tree/master/xkeyboard-config-chromebook].<br />
<br />
=== Power key and lid switch handling ===<br />
<br />
==== Ignore using logind ====<br />
<br />
Out of the box, {{ic|systemd-logind}} will catch power key and lid switch events and handle them: it will shut down the Chromebook on a power key press, and a suspend on a lid close. However, this policy might be a bit harsh given that the power key is an ordinary key at the top right of the keyboard that might be pressed accidentally.<br />
<br />
To configure logind to ignore power key presses and lid switches, add the lines to {{ic|logind.conf}} below.<br />
<br />
{{hc|head=/etc/systemd/logind.conf|<br />
output=HandlePowerKey=ignore<br />
HandleLidSwitch=ignore}}<br />
<br />
Then [[restart]] logind for the changes to take effect.<br />
<br />
Power key and lid switch events will still be logged to journald by logind. See [[https://wiki.archlinux.org/index.php/Power_management#ACPI_events]].<br />
<br />
==== Ignore by Gnome ====<br />
<br />
[[Pacman|Install]] {{Pkg|gnome-tweak-tool}}, open the Tweak Tool and under Power change the Power Button Action.<br />
<br />
== Firmware Write Protection ==<br />
<br />
{{Note|The information on this topic only intended to give you the basic understanding on the write protection feature in your Chromebook. The ArchWiki isn't the place for detailed hardware hacking guides so there is no sense in expanding this topic.}}<br />
<br />
The firmware (Coreboot and its payloads) stored on a SPI chip (usually SOIC8) that some of its storage is protected from writing (mostly Coreboot).<br />
<br />
As long as the write protection wasn't disabled or the protected range wasn't set to (0,0) any change made to the unprotected part of the firmware (mainly SeaBIOS) should be recoverable with Chrome OS recovery media.<br />
<br />
There are two parts of the write protection: hardware and software.<br />
<br />
=== Hardware Write Protection ===<br />
<br />
The hardware write protection is an electrical circuit that when it's closed or open it prevent writing to the software protection special registers, thus the hardware write protection only protect directly these special registers but indirectly also the data in the firmware chip.<br />
<br />
To disable the hardware write protection you may need to remove a screw, press a switch or short a jumper.<br />
<br />
=== Software Write Protection ===<br />
<br />
The software write protection are special registers which determining if the data stored in the firmware chip is protected and also holds the range of addresses of the protected data.<br />
<br />
=== Understanding the Process of Disabling the Write Protection ===<br />
<br />
To disable the write protection one would need to:<br />
* Disable the hardware write protection of the special software register.<br />
* Change the value of the special software register to disable software write protection or change the range of the protected addresses so no data will be protected (start and end at 0).<br />
Conclusion: If we will disable the software write protection and won't enable it back, then even if we will enable the hardware write protection the firmware chip will stay unprotected.<br />
<br />
==== Disabling the Hardware Write Protection ====<br />
<br />
To find the location of the hardware write-protect screw/switch/jumper and how to disable it visit the ArchWiki page for your Chromebook model (see [[Chromebook#Chromebook_Models|Chromebook Models]]). If there's no information about your device on the ArchWiki then turn to [http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devicesDeveloper Information for Chrome OS Devices] and [http://www.coreboot.org/Chromebooks Coreboot's Chromebooks page].<br />
<br />
==== Disabling the Software Write Protection ====<br />
<br />
Chromium OS's {{ic|flashrom}} can manipulate the software write protection special registers.<br />
* Read the status of the software write protection special registers.<br />
# flashrom --wp-status<br />
* Disable or enable the software write protection.<br />
# flashrom --wp-disable<br />
* Change software write protection addresses range.<br />
# flashrom --wp-range 0 0<br />
<br />
For more details on Chromium OS's {{ic|flashrom}} and how to obtain it, see [[Chromebook#Manually_With_flashrom|Manually Flash Custom Firmware with {{ic|flashrom}}]].<br />
<br />
== Custom Firmware ==<br />
<br />
=== Why Flash a Custom Firmware ? ===<br />
<br />
==== Pros ====<br />
<br />
* Adds a much recent version of SeaBIOS<br />
* Adds SeaBIOS payload of coreboot to Chromebook models that didn't shipped with SeaBIOS.<br />
* Reduce boot time.<br />
* Remove developer Mode screen.<br />
* Enables VMX.<br />
<br />
==== Cons ====<br />
<br />
* Dangerous, might brick your device.<br />
* Cannot boot stock Chrome OS (you can install [http://arnoldthebat.co.uk/wordpress/chromium-os/ Arnold the Bat’s Chromium OS build] and it should be possible upgrade it to full blown Chrome OS with a script).<br />
* It's possible that some quirks will be added, [https://bbs.archlinux.org/viewtopic.php?pid=1460520#p1460520].<br />
<br />
=== Flashing the Custom Firmware ===<br />
<br />
There are two approaches for flashing a custom firmware:<br />
* Use John Lewis' script which will save you time finding the correct firmware.<br />
* Manually with {{ic|flashrom}}, in this case you'll need to obtain the firmware by yourself or to compile it from the Coreboot sources ([http://www.coreboot.org/Download_coreboot official] or [https://chromium.googlesource.com/chromiumos/third_party/coreboot/ Chromium OS fork]).<br />
<br />
==== Disable the Hardware Write Protection ====<br />
<br />
See the [[Chromebook#Disabling the Hardware Write Protection|Disabling the Hardware Write Protection]] at the [[Chromebook#Firmware Write Protection|Firmware Write Protection]].<br />
<br />
==== Flashing With John Lewis' Script ====<br />
<br />
{{Warning|Do not run the script before disabling the hardware write protection.}}<br />
<br />
===== Understanding the script =====<br />
<br />
====== What John Lewis' {{ic|getnflash_johnlewis_rom.sh}} script does ? ======<br />
* Automatically downloads Chromium OS 32bit version of {{ic|flashrom}}.<br />
* Backup your current firmware.<br />
* Disables software write protection by running {{ic|# ./flashrom --wp-disable}}.<br />
* Checks the Chromebook product name with {{Pkg|dmidecode}} and download the proper custom firmware.<br />
* Writes the custom firmware.<br />
<br />
====== What the script doesn't do ? ======<br />
* Doesn't ask for confirmation.<br />
* Doesn't check if the hardware write protection is disabled.<br />
* Doesn't confirm the compatibility of a custom firmware to a specific Chromebook sub-model.<br />
<br />
====== Conclusions ====== <br />
* Make sure you disabled the hardware write protection.<br />
* Read the [https://johnlewis.ie/custom-chromebook-firmware/faq/ FAQ] and [https://johnlewis.ie/mediawiki/index.php?title=Coreboot_on_Chromebooks John's Wiki page].<br />
* [https://johnlewis.ie/custom-chromebook-firmware/rom-download/ Confirm that your Chromebook model is supported].<br />
* Check if the specific sub-model is listed in the [https://johnlewis.ie/mediawiki/index.php?title=Coreboot_on_Chromebooks#Supported_Models Supported Models table] and confirmed, if not then visit the [https://plus.google.com/communities/112479827373921524726 coreboot on Chromebooks Google+ community] and ask for advice.<br />
<br />
{{Warning|If you're flashing a custom firmware be prepared to the possibility that you might brick your device and make yourself familiar with the [[Chromebook#Unbricking_Your_Chromebook|unbricking methods]].}}<br />
<br />
===== Running the script in Chrome OS =====<br />
<br />
* Access your [[Chromebook#Accessing_the_superuser_shell|superuser shell]].<br />
* Enter the command shown on the [https://johnlewis.ie/custom-chromebook-firmware/rom-download/|the Download ROM page at John Lewis site].<br />
<br />
{{Note|The reason for not posting here is to force you to visit the site and read the page before proceeding.}}<br />
<br />
* After the script exited copy the backed up firmware to an external storage before rebooting the system.<br />
<br />
You should now have a custom firmware installed on your device, cross your fingers and reboot.<br />
<br />
If you flashed the firmware as part of the installation process then continue by following [[Chromebook#Installing_Arch_Linux|Installing Arch Linux]], if the custom firmware boots the installation media correctly then you might want to enable back the hardware write protection.<br />
<br />
===== Running the script in Arch Linux =====<br />
<br />
* In Arch Linux on 64bit envirmonment you''ll need to enable the Multilib repository (if it isn't already enabled) in pacman.conf and install {{Pkg|lib32-glibc}}.<br />
# pacman -S lib32-glibc<br />
<br />
* Install {{Pkg|dmidecode}}.<br />
# pacman -S dmidecode<br />
<br />
* Enter the command shown on the [https://johnlewis.ie/custom-chromebook-firmware/rom-download/|the Download ROM page at John Lewis site].<br />
<br />
{{Note|The reason for not posting here is to force you to visit the site and read the page before proceeding.}}<br />
<br />
* After the script exited copy the backed up firmware to an external storage before rebooting the system.<br />
<br />
You should now have a custom firmware installed on your device, cross you fingers and reboot.<br />
<br />
If the custom firmware boots Arch Linux correctly then you might want to enable back the hardware write protection.<br />
<br />
==== Manually With flashrom ====<br />
<br />
The use of the upstream {{Pkg|flashrom}} package is discourage as it's missing operations like {{ic|--wp-disable}}, {{ic|--wp-status}} and it will not write firmware successfully to the ROM of the Chromebook unless it already been programmed externally (i.e. flashing by another device over SPI with SOIC clip), this is why it's recommended to use Chromium OS's {{ic|flashrom}}. <br />
<br />
===== Get flashrom for Arch Linux =====<br />
<br />
* Download a 32bit statically linked Chromium OS's {{ic|flashrom}} version, enable the Multilib repository in pacman.conf and install {{Pkg|lib32-glibc}}<br />
# pacman -S lib32-glibc<br />
# wget --no-check-certificate https://johnlewis.ie/flashrom<br />
# chmod +x flashrom<br />
Don't forget that {{ic|flashrom}}'s location isn't in {{ic|$PATH}}, to execute it you'll need to precede the command with {{ic|./}}, e.g. {{ic|# ./flashrom}}.<br />
<br />
===== Get flashrom for Chrome OS =====<br />
<br />
Chrome OS already includes {{ic|flashrom}}.<br />
<br />
===== Basic use of flashrom =====<br />
<br />
* Disable software write protection before writing to the firmware chip.<br />
# flashrom --wp-disable<br />
<br />
* Backup firmware from the firmware chip.<br />
# flashrom -r old_firmware.bin<br />
<br />
* Write firmware to the firmware chip.<br />
# flashrom -w new_firmware.bin<br />
<br />
{{Tip|Find your firmware chip by running the command {{ic|<nowiki>flashrom -V|grep 'Found' |grep 'flash chip'</nowiki>}}}}<br />
<br />
=== Flashing Back Stock Firmware ===<br />
<br />
{{Note|The following assumes that your device is not bricked, if it does bricked then jump to [[Chromebook#Unbricking Your Chromebook|Unbricking Your Chromebook]]}}<br />
<br />
[[Chromebook#Disabling the Hardware Write Protection|Disable the hardware write protection]] and follow the how to [[Chromebook#Manually_With_flashrom|manually flash firmware with {{ic|flashrom}}]] to flash the backup of your stock firmware.<br />
<br />
=== Unbricking Your Chromebook ===<br />
<br />
{{Note|This doesn't intended to be a thorough guide but just give you a basic understanding of the process of flashing a firmware to a bricked Chromebook. The ArchWiki isn't the place for detailed hardware hacking guides so there is no sense in expanding this topic.}}<br />
<br />
==== Required Tools ====<br />
<br />
* Programmer, both the [http://flashrom.org/RaspberryPi Raspberry Pi] and the [http://flashrom.org/Bus_Pirate Bus Pirate] are mentioned as compatible devices on the [http://flashrom.org/ flashrom wiki]. The [http://flashrom.org/Bus_Pirate Bus Pirate] is preferable as it'll allow you to use Chromium OS's version of {{ic|flashrom}} that supports {{ic|--wp-disable}} and {{ic|--wp-status}} flags.<br />
* SOIC clip is recommended, see [http://flashrom.org/ISP].<br />
* Female jumper wires.<br />
* If you want to use Chromium OS's {{ic|flashrom}} another Linux machine (32bit or 64bit) is required.<br />
<br />
==== General Idea on the Unbricking Process ====<br />
<br />
* Connect the jumper wires to the programmer and the SOIC clip.<br />
* Connect the SOIC clip to the ROM chip.<br />
* If your programmer is running Linux (Raspberry Pi) then modprobe the spi modules.<br />
* If your programmer isn't running Linux then connect it to your Linux machine.<br />
* Write the firmware with {{ic|flashrom}}, you might need to disable software write protection by running {{ic|flashrom}} with the {{ic|--wp-disable}} flag (this is why Chromium OS's {{ic|flashrom}} is handy).<br />
<br />
==== Recommended Reading About Unbricking ====<br />
<br />
* Flashrom's wiki pages on [http://flashrom.org/ISP ISP], [http://flashrom.org/Bus_Pirate Bus Pirate], [http://flashrom.org/RaspberryPi Raspberry Pi] and [http://flashrom.org/Technology#SO8.2FSOIC8:_Small-Outline_Integrated_Circuit.2C_8_pins SOIC8].<br />
* [http://www.coreboot.org/Chromebooks Coreboot's wiki page on Chromebooks].<br />
* Examples of unbricking the C720: [http://www.tnhh.net/2014/08/25/unbricking-chromebook-with-beaglebone.html guide], [https://drive.google.com/folderview?id=0B9f62MH0umbmRTA2Xzd5WHhjWEU&usp=sharing pictures].<br />
<br />
== Known issues ==<br />
<br />
=== Syslinux ===<br />
<br />
Syslinux fails to set the bootable flag with {{ic|syslinux-install_update -i -a -m}}. After setting the bootable flag manually in {{ic|fdisk}} and installing Syslinux to the MBR with {{ic|syslinux-install_update -i -m}}, SeaBIOS boots Syslinux, but Syslinux then complains about a missing OS. Use GRUB for now.<br />
<br />
=== Hangs and freezes with Haswell GPU ===<br />
<br />
With Haswell GPUs (and there're some reports also about Bay-Trail-M) [https://bugs.freedesktop.org/show_bug.cgi?id=83677 there's a known bug] ([https://bugs.freedesktop.org/show_bug.cgi?id=80229 at least since kernel 3.16]) which will result in a temporary hang of an application (that might or not be recoverable), and in much lower occurrence will might end with an unrecoverable full system freeze.<br />
Depending on the Desktop environment and the application the issue might occur less frequently.<br />
Chromium is known to hang in much higher rates than Firefox and Gnome is more subject to full system freezes.<br />
<br />
Some kernel parameters have been suggested to moderate the results of this bug (but will not eliminate them completely), there no official recommendation by a kernel developer to use these parameters and it isn't known if adding them will introduce another issues, use them at your own risk.<br />
i915.modeset=1 i915.semaphores=0 i915.use_mmio_flip=1 i915.enable_ppgtt=1<br />
<br />
== See also ==<br />
<br />
* [https://bbs.archlinux.org/viewtopic.php?id=173418 BBS topic about the Acer C720] which include generic information on Haswell Based Chromebooks.<br />
* Re-partitioning in Chrome OS [http://chromeos-cr48.blogspot.co.uk/2012/04/chrubuntu-1204-now-with-double-bits.html], [http://goo.gl/i817v]<br />
* [http://bit.ly/NewChromebooks Constantly updating list of Chrome OS devices]<br />
* [http://prodct.info/chromebooks/ Google Chromebook Comparison Chart]</div>Serh