Posts

Ice-breaker: Archlinux on Dell chromebook 11

Hunting for a budget laptop is tough, especially when you are a Thinkpad user. After a lot of search I settled down with Dell Chromebook 11 mainly beacause of its

  1. Long battery life (around 9 hrs)
  2. Good keyboard
  3. Ruggedness and black matte finish

Once you procure the device, the next step is to get rid of Chrome OS ;) and install archlinux on it. You could easily follow the instructions discussed in the forum post. Mostly everything works well out of the box. You might have to downgrade to linux kernel 4.4.5-1 due to some latest compilation bug in arch, for the soundcard to work. The final thing is to setup dell active-light for fun. For simple testing install pyusb from AUR.

pacaur -S python2-pyusb-git

Use the following script to test dell active-light. You might have to change the dev and endpoint details based on your hardware (lsusb -v). Enjoy :).

import usb.core
import usb.util
import binascii
import sys
import random 

dev = usb.core.find(idVendor=0x04D8, idProduct=0x0B28)

clrs = { 
        'red': 0x01,
        'green': 0x02,
        'blue' : 0x03,
        'yellow' : 0x04,
        'cyan' : 0x05,
        'magenta' : 0x06,
        'white' : 0x07,
        'black' : 0x08,
        }

if len(sys.argv) < 2 or (sys.argv[1] not in clrs.keys()):
    print "Usage: alright.py <colour>"
    sys.exit()

if dev is None:
    raise ValueError('Device not found')
if dev.is_kernel_driver_active(1):
   print "Detaching"
   dev.detach_kernel_driver(1)

dev.set_configuration(1)

cfg = dev.get_active_configuration()
intf = cfg[(0,0)]
ep = usb.util.find_descriptor(
            intf,
            custom_match = \
            lambda e: \
            usb.util.endpoint_direction(e.bEndpointAddress) == \
            usb.util.ENDPOINT_OUT)

assert ep is not None
cmd0 = 0x11
cmd1 = clrs[sys.argv[1]] 
cmd3 = random.randint(1,255)  
cmd2 = (21 * cmd0 * cmd0 + 19 * cmd1 - 3 * cmd3 ) % 255

for i in range(2):
    ep.write(bytearray([cmd0,cmd1,cmd2,cmd3]))

© Sreeraj Rajendran. Built using Pelican.