@ -0,0 +1,100 @@ | |||||
.title-bar { | |||||
background-color: #FFC512; | |||||
} | |||||
.title-bar .title-bar__title { | |||||
color: #000133; | |||||
font-family: Iosevka; | |||||
} | |||||
.side-bar .side-bar__menu .side-bar__link:hover, .side-bar .side-bar__menu .side-bar__link.side-bar__link--active { | |||||
color: #B30049; | |||||
} | |||||
h1 { | |||||
color: #EBA80F; | |||||
font-family: Iosevka; | |||||
font-size: 2em; | |||||
} | |||||
h2 { | |||||
color: #0082C9; | |||||
font-family: Iosevka; | |||||
font-size: 1.5em; | |||||
border: 3px solid #DFDFDF; | |||||
padding: 4px; | |||||
text-align: center; | |||||
box-shadow: 0px 0px 15px #888888; | |||||
} | |||||
h3 { | |||||
color: #B30049; | |||||
font-family: Iosevka; | |||||
font-size: 1.2em; | |||||
} | |||||
.p, .kpn-style p:not([class]) { | |||||
font-family: Iosevka; | |||||
} | |||||
body, h1 { | |||||
font-family: Iosevka; | |||||
} | |||||
.h2, .kpn-style h2:not([class]) { | |||||
font-family: Iosevka; | |||||
font-weight: 800; | |||||
} | |||||
.tile { | |||||
box-shadow: 1px 1px 6px #6f6f6f; | |||||
} | |||||
a[rel=prev] { | |||||
display: none; | |||||
} | |||||
a[rel=next] { | |||||
display: none; | |||||
} | |||||
.card-title { | |||||
text-align: center; | |||||
font-size: 1.2em; | |||||
} | |||||
.card-title h4 { | |||||
text-align: center; | |||||
} | |||||
.card-footer { | |||||
text-align: center; | |||||
} | |||||
.card-footer .btn { | |||||
} | |||||
.badge { | |||||
font-size: 50%; | |||||
} | |||||
.card-img-top { | |||||
width: 100%; | |||||
height: 10vw; | |||||
object-fit: cover; | |||||
margin-top: 0.5em; | |||||
} | |||||
.md-typeset a, a { | |||||
color: #0082C9; | |||||
} | |||||
.md-tabs__link { | |||||
color: #F8E7A5; | |||||
} | |||||
.md-tabs__link--active { | |||||
font-weight: 900; | |||||
font-size: 1.6em; | |||||
} | |||||
@ -0,0 +1,6 @@ | |||||
[Dolphin] | |||||
SortOrder=1 | |||||
SortRole=modificationtime | |||||
Timestamp=2021,2,11,2,17,39 | |||||
Version=4 | |||||
VisibleRoles=Details_text,Details_size,Details_modificationtime,Details_type,CustomizedDetails |
@ -0,0 +1,23 @@ | |||||
--- | |||||
hide: | |||||
--- | |||||
# Welcome to the Libre Tech Shop Documentation | |||||
The Libre Tech Shop is a first of its kind online store for products that | |||||
respect your freedom. | |||||
Every product you purchase here will be powered by free software, will be | |||||
accompanied by documentation and will give you the freedom to hack, learn, | |||||
modify and share. These products will not track you and will respect your | |||||
freedom and privacy. | |||||
# Products | |||||
| Method | Description | | |||||
| ----------- | ------------------------------------ | | |||||
| <img class="card-img-top" src="/images/lc230.png" style="height: 100px"> | [LC230](/lc230/) <br> Liberated Computer LC230 | | |||||
| <img class="card-img-top" src="/images/libreelec.png" style="height: 100px"> | [LE01](/le01/) <br> Liberated Entertainment Center LE01 | | |||||
| <img class="card-img-top" src="/images/both-rgb-controller.jpg" style="height: 100px"> | [LEDC](/ledc/) <br> LED Lighting Controller LEDC | | |||||
@ -0,0 +1,92 @@ | |||||
# LC230 - The Liberated Computer | |||||
<figure> | |||||
<img src="/images/x230.png"/> | |||||
</figure> | |||||
## Why LC230? | |||||
Why does LC230 exist? | |||||
Some of the most fundamental questions that we need to answer about the hardware that we possess are those of "ownership": | |||||
!!! question | |||||
- [ ] What is the definition of owning a piece of hardware? | |||||
- [ ] Are we the owners of the hardware merely because we paid for it and now have possession of it? | |||||
- [ ] If we are owners do we have the necessary freedom and opportunity to do what we want with it? | |||||
- [ ] How much control does the manufacturer of a device exert after "selling" the device to us? | |||||
- [ ] If such control does exist, then how do we re-define ownership now? | |||||
The answers to these questions are not easy, universal or simple. Hence, we might define ownership in the following terms: | |||||
!!! info | |||||
We are the true owners of our hardware if we can **do whatever we want** with hardware **without then | |||||
permission of the manufacturer**. This includes the **freedom to change or upgrade hardware components** | |||||
at will, **repair and refurbish** the hardware and **install the software we want** (without constraints). | |||||
The **"Liberated Computer"** project exists to provide users with convenient access to | |||||
reliable, libre-software friendly and hackable computers. The key to having the freedom to compute in a manner | |||||
we deem respectful is to first liberate the computers from the locks and constraints imposed by the manufacturer. | |||||
!!! failure | |||||
<figure> | |||||
<img src="/images/lenovo-error.jpg" /> | |||||
<figcaption style="text-align: justify;"> | |||||
Even 8 years after the model ceased production, Lenovo's BIOS does not give you the freedom to change the | |||||
wireless card of the laptop to one that would work without proprietary firmware! <br> <br> | |||||
This is a classic example of a manufacturer exerting control over the hardware well beyond its intended lifespan. <br> <br> | |||||
Unless a wireless card that is "white-listed" by the BIOS is plugged in, the system will not boot up. The only way to | |||||
move beyond this limitation is to replace the BIOS and hence, liberate the computer. | |||||
</figcaption> | |||||
</figure> | |||||
## What is Coreboot? | |||||
Coreboot is a free/libre software BIOS replacement. It was developed to allow computers users the ability to exert | |||||
greater control on their computers by being able to control the BIOS. Coreboot is a very modular BIOS and runs on a wide | |||||
variety of computer mainboards. More details are available at: [coreboot.org](https://coreboot.org) | |||||
Coreboot's main advantage is that of software freedom at the BIOS level. It liberates the computer and allows a | |||||
user to load multiple types of boot payloads while also allowing us to cripple and neuter the Intel ME. | |||||
Some of the common payloads supported by Coreboot are: | |||||
- SeaBIOS - the default payload that ships with your LC230 | |||||
- Linux - you can embed and load a Linux kernel on the BIOS chip | |||||
- Grub - You can also daisy-chain and boot Grub from Coreboot so that you can perform the rest of the boot process via Grub | |||||
- `nvramtui` - a utility to configure the Embedded Controller (EC) firmware on thinkpad laptops | |||||
- `memtest` - perform memory tests at the BIOS level! | |||||
- `coreinfo` - provides low-level information about Coreboot | |||||
- TINC - play tetris without even booting an OS! | |||||
!!! info | |||||
<figure> | |||||
<img src="/images/tinc.png" style="height: auto; width: 400px;"/> | |||||
<figcaption style="text-align: justify;"> | |||||
The TINC Coreboot payload - Tetris at the BIOS level. No Operating System! | |||||
</figcaption> | |||||
</figure> | |||||
## Introducing Skulls | |||||
The [Skulls Project](https://github.com/merge/skulls) is a [Coreboot | |||||
distribution](https://doc.coreboot.org/distributions.html). They ship a | |||||
pre-compiled Coreboot binary for the Lenovo X230 Thinkpad along with a set of | |||||
scripts that make it it simple to install and use it. | |||||
The LC230 ships pre-installed with the latest release of Skulls. | |||||
## How is an LC230 assembled? | |||||
Your LC230 laptop is refurbished and liberated with a mix of new and used components. Here is the process of refurbishing it: | |||||
1. We first purchase a used Lenovo x230 Thinkpad laptop | |||||
2. Once we inspect it for physical and other defects, the process of liberating it starts. | |||||
3. First the laptop is opened up and cleaned - all the internal and external plus the CPU fan. | |||||
4. Next using a SIOC-8 clip, coreboot is flashed to SPI flash that is used to store the system firmware. | |||||
5. Once the sytem is running coreboot, the default Intel wireless card is replaced with an Atheros one. | |||||
6. After that, based on the requested configuration, a new mSATA or SATA SSD is added, more RAM or even a brand new battery. | |||||
7. Finally - an OS is installed and the system is tested for heating issues, networking and so on. | |||||
Now your liberated computer is ready for you to play with ! :-) | |||||
@ -0,0 +1,69 @@ | |||||
# Troubleshooting & Common Problems | |||||
## Heating or fan issues | |||||
One possible challenge with a refurbished laptop is that there can be heating | |||||
issues. All LC230 units that we sell are well tested for such issues to ensure | |||||
that the laptop's CPU cools well during heavy CPU usage. This is done by | |||||
ensuring two things: | |||||
1. The CPU fan is clean of dust and other foreign material that might affect | |||||
its ability to offer good CPU cooling. | |||||
2. The CPU fan's heatsink is able to conduct heat properly | |||||
Check out what a dirty and clean fan looks like. | |||||
<div style="text-align: center"> | |||||
<figure style="display: inline-block" > | |||||
<img src="/images/dirty-fan.jpg" width="250" /> | |||||
<figcaption> A dirty fan! </figcaption> | |||||
</figure> | |||||
| |||||
<figure style="display: inline-block" > | |||||
<img src="/images/clean-fan.jpg" width="250" /> | |||||
<figcaption> A very clean fan! </figcaption> | |||||
</figure> | |||||
</div> | |||||
If you face any heating issues (or a noisy fan) a few months after purchasing a | |||||
LC230, one thing that would help is cleaning the fan using an air blower. | |||||
Here is what a clean CPU fan achieves: | |||||
<figure style="box-shadow: 0px 0px 20px #888888; margin-bottom: -2em;" > | |||||
<img src="/images/htop.png" /> | |||||
</figure> | |||||
<br> | |||||
<figure style="box-shadow: 0px 0px 20px #888888;" > | |||||
<img src="/images/stress-test.png" /> | |||||
</figure> | |||||
As you can see, even under very heavy CPU utilisation (and system load), the | |||||
CPU fan running at **5380 RPM** is able to cool down the CPU to keep the core | |||||
temperature around +84° C. | |||||
## Battery management | |||||
In case your current LC230 battery does not give you sufficient backup, you can | |||||
purchase a new 6-cell or 9-cell battery. The part numbers are as follows: | |||||
* Lenovo Thinkpad 6-cell Battery 44+ (Part Number: 0A36306) | |||||
* Lenovo ThinkPad 9-cell Battery 44++ (Part Number: 0A36307) | |||||
## Swapping the keyboard | |||||
It is possible to use the Lenovo Classic keyboard (last seen on the X220 | |||||
Thinkpad model) with the X230. This involves three steps: | |||||
- Modifying the keyboard connector | |||||
- Flashing a modified BIOS (over the default Lenovo one) | |||||
- Replacing the palm-rest with an x220 one | |||||
We will be glad to help you with this modification. The steps are detailed on the | |||||
[Thinkwiki](http://www.thinkwiki.org/wiki/Install_Classic_Keyboard_on_xx30_Series_ThinkPads). | |||||
@ -0,0 +1,318 @@ | |||||
# (LC230) User Guide | |||||
## The Coreboot Boot Process | |||||
Here is what the boot process looks like with Coreboot installed: | |||||
<figure> | |||||
<img src="/images/coreboot-diagram.png" width="420" /> | |||||
<figcaption>Coreboot Sequence Diagram</figcaption> | |||||
</figure> | |||||
The first part of the boot process (labelled as "Coreboot Internal" in the diagram above) is | |||||
largely hidden from the user. The boot process is illustrated below: | |||||
<figure> | |||||
<img src="/images/lc230-boot.gif" width="420" /> | |||||
<figcaption>LC230 Boot Process</figcaption> | |||||
</figure> | |||||
## Installing an OS | |||||
To install any GNU/Linux OS, here is a sequence of steps: | |||||
### Build USB Installer | |||||
Any GNU/Linux OS would work very well on your LC230 laptop. (Some owners have | |||||
also installed and used FreeBSD on it.) | |||||
LC230 is configured to run without any proprietary firmware and hence, any of | |||||
the following operating systems would work well by default: | |||||
* [Debian GNU/Linux (main)](https://debian.org) | |||||
* [PureOS](https://pureos.net/) | |||||
* [Triquel](https://trisquel.info/) | |||||
!!! tip | |||||
The [Rasperrby Pi Imager](https://www.raspberrypi.org/software/) is a good | |||||
tool to use to write an OS image to a USB disk. [Balena Etcher](https://www.balena.io/etcher/) is another | |||||
one. | |||||
### Plug-in USB Disk | |||||
The USB needs to be plugged in before you reboot the laptop - or else SeaBIOS | |||||
will not detect it and show it as a boot option. | |||||
!!! info | |||||
The blue USB ports on the left side of the laptop are USB3 ports. If you | |||||
have a USB disk that works with USB3, then using these ports will give you | |||||
much better USB disk performance. | |||||
The USB port on the right side (yellow in colour) is a USB2 port. | |||||
### Choose the boot device | |||||
Press ++escape++ on boot and choose the USB disk as the boot device | |||||
<figure> | |||||
<img src="/images/lc230-boot-logo.jpg" width="400" /> | |||||
<figcaption>LC230 Boot Image</figcaption> | |||||
</figure> | |||||
By default, the first boot option is chosen to boot off. This is usually the | |||||
2.5" SATA disk if it is plugged in to the laptop. To choose another boot | |||||
device, you need to press ++escape++ and then choose the desired boot device | |||||
from the SeaBIOS menu. | |||||
If you have a 2.5" SATA disk, then a USB disk would be the second boot device. | |||||
If you have a 2.5" SATA disk **and** a mSATA disk, then the USB disk would be | |||||
the third boot device. | |||||
<figure> | |||||
<img src="/images/lc230-usb3.jpg"/> | |||||
<figcaption>LC230 USB3 Ports</figcaption> | |||||
</figure> | |||||
### Install the OS | |||||
You can now proceed with the OS installation as normal. | |||||
The LC230 does not provide a UEFI BIOS (like the default Lenovo BIOS firmware). | |||||
SeaBIOS is a pc-bios payload and most GNU/Linux OS installers will detect that | |||||
and install the correct bootloader. This would be `grub-pc` if you choose to | |||||
use Grub and Debian. | |||||
## Coreboot Internal Flashing | |||||
To flash Coreboot to the x230 motherboard, the first step is to flash the BIOS | |||||
externally - ie. using a SIOC-8 flashing clip connecting to the BIOS chips: | |||||
<figure> | |||||
<img src="/images/x230-flashing.png"/> | |||||
<figcaption>Liberating the LC230 via External Flashing</figcaption> | |||||
</figure> | |||||
However, as a part of the external flashing process, the BIOS is unlocked. This | |||||
means that you can update / modify the BIOS on the SPI Flash internally - from | |||||
within the operating system. Here are some reasons to do that and the steps | |||||
involved. | |||||
### Configure the kernel | |||||
The first things to do before you can flash Coreboot internally, is to boot the | |||||
kernel with an additional option: | |||||
iomem=relaxed | |||||
On Debian (and derived operating systems such as Ubuntu), you can make this a | |||||
permanent setting: | |||||
1. Edit the file: `/etc/default/grub` | |||||
2. Update the line `GRUB_CMDLINE_LINUX` to read: | |||||
`GRUB_CMDLINE_LINUX="iomem=relaxed"` | |||||
3. Run: `update-grub` to update the Grub configuration. | |||||
### Query Coreboot details | |||||
You can verify the coreboot version (as well as the fact that you're running | |||||
coreboot) by using the `dmidecode` utility as follows: | |||||
#### BIOS version | |||||
``` console | |||||
$ sudo dmidecode -t bios | |||||
# dmidecode 3.3 | |||||
Getting SMBIOS data from sysfs. | |||||
SMBIOS 2.8 present. | |||||
Handle 0x0000, DMI type 0, 26 bytes | |||||
BIOS Information | |||||
Vendor: coreboot | |||||
Version: CBET4000 4.10-1082-g4357a82076-dirty | |||||
Release Date: 10/20/2019 | |||||
ROM Size: 12 MB | |||||
Characteristics: | |||||
PCI is supported | |||||
PC Card (PCMCIA) is supported | |||||
BIOS is upgradeable | |||||
Selectable boot is supported | |||||
ACPI is supported | |||||
Targeted content distribution is supported | |||||
BIOS Revision: 4.10 | |||||
Firmware Revision: 0.0 | |||||
``` | |||||
#### System type & name | |||||
``` shell-session | |||||
$ sudo dmidecode -t system | |||||
# dmidecode 3.3 | |||||
Getting SMBIOS data from sysfs. | |||||
SMBIOS 2.8 present. | |||||
Handle 0x0001, DMI type 1, 27 bytes | |||||
System Information | |||||
Manufacturer: LENOVO | |||||
Product Name: 2325BU3 | |||||
Version: ThinkPad X230 | |||||
Serial Number: PK1HM8E | |||||
UUID: ce136601-xxxx-xxxx-xxxx-xxxxxxxxxxxx | |||||
Wake-up Type: Reserved | |||||
SKU Number: Not Specified | |||||
Family: ThinkPad X230 | |||||
Handle 0x000B, DMI type 32, 11 bytes | |||||
System Boot Information | |||||
Status: No errors detected | |||||
``` | |||||
### Install: `flashrom` | |||||
The primary tool for operating on your BIOS is called `flashrom`. The Debian | |||||
package is also called by the same name and can be installed as: | |||||
apt-get install flashrom | |||||
If the kernel is booted correctly with `iomem=relaxed`, you can run `flashrom`: | |||||
flashrom -pinternal | |||||
Ouput: | |||||
``` shell-session | |||||
$ sudo flashrom -pinternal | |||||
flashrom v1.2 on Linux 5.10.9-gnu (x86_64) | |||||
flashrom is free software, get the source code at https://flashrom.org | |||||
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns). | |||||
coreboot table found at 0xbff51000. | |||||
Found chipset "Intel QM77". | |||||
Enabling flash write... SPI Configuration is locked down. | |||||
Enabling hardware sequencing due to multiple flash chips detected. | |||||
OK. | |||||
Found Programmer flash chip "Opaque flash chip" (12288 kB, Programmer-specific) mapped at physical address 0x0000000000000000. | |||||
No operations were specified. | |||||
``` | |||||
!!! tip | |||||
Sometimes `flashrom` will not detect the internal flash chip, though it | |||||
might very well be able to confirm the BIOS type and machine name. In such | |||||
cases, you can try to run `flashrom` as: `flashrom | |||||
-pinternal:laptop=force_I_want_a_brick`. This is not completely safe | |||||
### Read BIOS Image | |||||
You can dump the BIOS to a file: | |||||
``` console | |||||
$ flashrom -pinternal -r lc230-coreboot.rom | |||||
``` | |||||
This will read the BIOS to a file: `lc230-coreboot.rom`. This file will be 12 MB in size. | |||||
``` console | |||||
$ sudo flashrom -pinternal -r lc230.rom | |||||
flashrom v1.2 on Linux 5.10.9-gnu (x86_64) | |||||
flashrom is free software, get the source code at https://flashrom.org | |||||
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns). | |||||
coreboot table found at 0xbff51000. | |||||
Found chipset "Intel QM77". | |||||
Enabling flash write... SPI Configuration is locked down. | |||||
Enabling hardware sequencing due to multiple flash chips detected. | |||||
OK. | |||||
Found Programmer flash chip "Opaque flash chip" (12288 kB, Programmer-specific) mapped at physical address 0x0000000000000000. | |||||
Reading flash... done. | |||||
$ ls -lh lc230-coreboot.rom | |||||
-rw-r--r-- 1 root root 12M Feb 8 04:46 lc230-coreboot.rom | |||||
``` | |||||
### Write BIOS Image | |||||
You can now write back to the BIOS chips as follows: | |||||
``` console | |||||
$ sudo flashrom -pinternal -w lc230-coreboot.rom | |||||
flashrom v1.2 on Linux 5.10.9-gnu (x86_64) | |||||
flashrom is free software, get the source code at https://flashrom.org | |||||
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns). | |||||
coreboot table found at 0xbff51000. | |||||
Found chipset "Intel QM77". | |||||
Enabling flash write... SPI Configuration is locked down. | |||||
Enabling hardware sequencing due to multiple flash chips detected. | |||||
OK. | |||||
Found Programmer flash chip "Opaque flash chip" (12288 kB, Programmer-specific) mapped at physical address 0x0000000000000000. | |||||
Reading old flash chip contents... done. | |||||
Erasing and writing flash chip... | |||||
Warning: Chip content is identical to the requested image. | |||||
Erase/write done | |||||
``` | |||||
### Flash: Skulls | |||||
The Skulls Coreboot distribution provides built in scripts to upgrade the BIOS. | |||||
The update procedure is [detailed | |||||
here](https://github.com/merge/skulls/blob/master/x230/README.md#updating). | |||||
Your LC230 ships with the latest release of Skull available at the time of | |||||
shipping the laptop to you. You can upgrade skulls using the instructions above. | |||||
### Flash: Heads | |||||
If you want to experiment with the [Heads firmware](https://osresearch.net/), | |||||
instructions are available on the [Heads website](https://osresearch.net/) as | |||||
well as in the [Skulls documentation](https://github.com/merge/skulls/blob/master/x230/README.md#moving-to-heads). | |||||
## Configuring Coreboot | |||||
Your LC230 ships with a SeaBIOS payload called `nvramcui` that allows you to | |||||
configure coreboot behaviour and save the settings to nvram. | |||||
<div style="text-align: center"> | |||||
<figure style="display: inline-block" > | |||||
<img src="/images/nvramcui-1.jpg" width="250" /> | |||||
<figcaption> nvramcui options (1) </figcaption> | |||||
</figure> | |||||
<figure style="display: inline-block" > | |||||
<img src="/images/nvramcui-2.jpg" width="235" /> | |||||
<figcaption> nvramcui options (2) </figcaption> | |||||
</figure> | |||||
<figure style="display: inline-block" > | |||||
<img src="/images/nvramcui-3.jpg" width="235" /> | |||||
<figcaption> nvramcui options (3) </figcaption> | |||||
</figure> | |||||
</div> | |||||
### Swapping ++fn++ and ++control++ | |||||
The `fn_ctrl_swap` on the 2nd page of the `nvramcui` settings page enables you | |||||
to toggle the ++fn++ and ++control++ swap. If you like to have the control key | |||||
on the bottom left corner of the keyboard, then you can set this option to `Enable`. | |||||
### Increasing Graphics Memory | |||||
The x230 GPU does not have dedication RAM. Instead it shares its memory with | |||||
the main system memory. You can configure how much RAM is dedicated to the GPU | |||||
via the `gfx_uma_size` option on the 3rd page of the `nvramcui` settings. | |||||
Pressing the ++left++ and ++right++ arrow keys you can iterate over all the | |||||
available settings for this option. | |||||
### Other settings | |||||
You can also configure the following behaviour via nvramcui: | |||||
* **Always On USB**: By enabling this option, you can configure the USB ports | |||||
to be *always on* - even when the laptop is suspended. | |||||
* **Enable/Disable Trackpoing, Touchpad**: You can toggle the `touchpad` and | |||||
`trackpoint` options to enable or disable the the touchpad and trackpoint | |||||
respectively. | |||||
@ -0,0 +1,8 @@ | |||||
# LE01 - Liberated Entertainment Center | |||||
<figure> | |||||
<img src="/images/libreelec.png" width="420" align="left" /> | |||||
<figcaption>Powered by LibreELEC</figcaption> | |||||
</figure> | |||||
# Documentation coming soon... |
@ -0,0 +1,8 @@ | |||||
# LEDC - LED Lighting Controller | |||||
<figure> | |||||
<img src="/images/both-rgb-controller.jpg" width="420" align="left" /> | |||||
<figcaption>For RGB LED Strips</figcaption> | |||||
</figure> | |||||
# Documentation coming soon... |
@ -0,0 +1,69 @@ | |||||
# Project information | |||||
site_name: 'LibreTechShop - Documentation' | |||||
site_description: 'Accessible & Free Documentation for Libre Products' | |||||
site_author: 'Abhas Abhinav' | |||||
site_logo: /images/lts-icon.png | |||||
# Repository | |||||
#repo_name: 'abhas/lts-docs' | |||||
#repo_url: https://github.com/abhas/lts-docs | |||||
# Copyright | |||||
copyright: 'Copyright © Mostly Harmless' | |||||
theme: | |||||
name: material | |||||
nav_style: dark | |||||
font: false | |||||
logo: images/lts-icon.png | |||||
favicon: images/lts-icon.png | |||||
palette: | |||||
scheme: default | |||||
primary: white | |||||
accent: pink | |||||
# Google Analytics Disabled by default | |||||
google_analytics: | |||||
extra: | |||||
# Use the repo edit url instead of the link to the repo | |||||
use_edit_url: false | |||||
nav: | |||||
- Home: index.md | |||||
- LC230: | |||||
- (LC230) Overview: lc230/index.md | |||||
- (LC230) User Guide: lc230/user-guide.md | |||||
- (LC230) Troubleshooting: lc230/troubleshooting.md | |||||
- LE01: le01/index.md | |||||
- LEDC: ledc/index.md | |||||
plugins: | |||||
- search | |||||
extra_css: | |||||
- css/extra.css | |||||
# Extensions | |||||
markdown_extensions: | |||||
- attr_list | |||||
- admonition | |||||
- codehilite: | |||||
guess_lang: false | |||||
- toc: | |||||
permalink: true | |||||
toc_depth: 3 | |||||
- footnotes | |||||
- meta | |||||
- pymdownx.critic | |||||
- pymdownx.emoji | |||||
- pymdownx.keys | |||||
- pymdownx.mark | |||||
- pymdownx.smartsymbols | |||||
- pymdownx.tasklist: | |||||
custom_checkbox: true | |||||
- pymdownx.tilde | |||||
- pymdownx.tabbed | |||||
- pymdownx.progressbar | |||||
- pymdownx.highlight | |||||
- pymdownx.superfences |
@ -0,0 +1,327 @@ | |||||
<!doctype html> | |||||
<html lang="en" class="no-js"> | |||||
<head> | |||||
<meta charset="utf-8"> | |||||
<meta name="viewport" content="width=device-width,initial-scale=1"> | |||||
<meta name="description" content="Accessible & Free Documentation for Libre Products"> | |||||
<meta name="author" content="Abhas Abhinav"> | |||||
<link rel="shortcut icon" href="/images/lts-icon.png"> | |||||
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.2.4"> | |||||
<title>LibreTechShop - Documentation</title> | |||||
<link rel="stylesheet" href="/assets/stylesheets/main.15aa0b43.min.css"> | |||||
<link rel="stylesheet" href="/assets/stylesheets/palette.75751829.min.css"> | |||||
<meta name="theme-color" content="#ffffff"> | |||||
<link rel="stylesheet" href="/css/extra.css"> | |||||
</head> | |||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" data-md-color-accent="pink"> | |||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> | |||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> | |||||
<label class="md-overlay" for="__drawer"></label> | |||||
<div data-md-component="skip"> | |||||
</div> | |||||
<div data-md-component="announce"> | |||||
</div> | |||||
<header class="md-header" data-md-component="header"> | |||||
<nav class="md-header-nav md-grid" aria-label="Header"> | |||||
<a href="/." title="LibreTechShop - Documentation" class="md-header-nav__button md-logo" aria-label="LibreTechShop - Documentation"> | |||||
<img src="/images/lts-icon.png" alt="logo"> | |||||
</a> | |||||
<label class="md-header-nav__button md-icon" for="__drawer"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg> | |||||
</label> | |||||
<div class="md-header-nav__title" data-md-component="header-title"> | |||||
<div class="md-header-nav__ellipsis"> | |||||
<div class="md-header-nav__topic"> | |||||
<span class="md-ellipsis"> | |||||
LibreTechShop - Documentation | |||||
</span> | |||||
</div> | |||||
<div class="md-header-nav__topic"> | |||||
<span class="md-ellipsis"> | |||||
</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<label class="md-header-nav__button md-icon" for="__search"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> | |||||
</label> | |||||
<div class="md-search" data-md-component="search" role="dialog"> | |||||
<label class="md-search__overlay" for="__search"></label> | |||||
<div class="md-search__inner" role="search"> | |||||
<form class="md-search__form" name="search"> | |||||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required> | |||||
<label class="md-search__icon md-icon" for="__search"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> | |||||
</label> | |||||
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg> | |||||
</button> | |||||
</form> | |||||
<div class="md-search__output"> | |||||
<div class="md-search__scrollwrap" data-md-scrollfix> | |||||
<div class="md-search-result" data-md-component="search-result"> | |||||
<div class="md-search-result__meta"> | |||||
Initializing search | |||||
</div> | |||||
<ol class="md-search-result__list"></ol> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</nav> | |||||
</header> | |||||
<div class="md-container" data-md-component="container"> | |||||
<main class="md-main" data-md-component="main"> | |||||
<div class="md-main__inner md-grid"> | |||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation" > | |||||
<div class="md-sidebar__scrollwrap"> | |||||
<div class="md-sidebar__inner"> | |||||
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> | |||||
<label class="md-nav__title" for="__drawer"> | |||||
<a href="/." title="LibreTechShop - Documentation" class="md-nav__button md-logo" aria-label="LibreTechShop - Documentation"> | |||||
<img src="/images/lts-icon.png" alt="logo"> | |||||
</a> | |||||
LibreTechShop - Documentation | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href="/." class="md-nav__link"> | |||||
Home | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item md-nav__item--nested"> | |||||
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" > | |||||
<label class="md-nav__link" for="nav-2"> | |||||
LC230 | |||||
<span class="md-nav__icon md-icon"></span> | |||||
</label> | |||||
<nav class="md-nav" aria-label="LC230" data-md-level="1"> | |||||
<label class="md-nav__title" for="nav-2"> | |||||
<span class="md-nav__icon md-icon"></span> | |||||
LC230 | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href="/lc230/" class="md-nav__link"> | |||||
(LC230) Overview | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="/lc230/user-guide/" class="md-nav__link"> | |||||
(LC230) User Guide | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="/lc230/troubleshooting/" class="md-nav__link"> | |||||
(LC230) Troubleshooting | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="/le01/" class="md-nav__link"> | |||||
LE01 | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="/ledc/" class="md-nav__link"> | |||||
LEDC | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="md-content"> | |||||
<article class="md-content__inner md-typeset"> | |||||
<h1>404 - Not found</h1> | |||||
</article> | |||||
</div> | |||||
</div> | |||||
</main> | |||||
<footer class="md-footer"> | |||||
<div class="md-footer-meta md-typeset"> | |||||
<div class="md-footer-meta__inner md-grid"> | |||||
<div class="md-footer-copyright"> | |||||
<div class="md-footer-copyright__highlight"> | |||||
Copyright © Mostly Harmless | |||||
</div> | |||||
Made with | |||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> | |||||
Material for MkDocs | |||||
</a> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</footer> | |||||
</div> | |||||
<script src="/assets/javascripts/vendor.93c04032.min.js"></script> | |||||
<script src="/assets/javascripts/bundle.83e5331e.min.js"></script><script id="__lang" type="application/json">{"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}</script> | |||||
<script> | |||||
app = initialize({ | |||||
base: "/", | |||||
features: [], | |||||
search: Object.assign({ | |||||
worker: "/assets/javascripts/worker/search.8c7e0a7e.min.js" | |||||
}, typeof search !== "undefined" && search) | |||||
}) | |||||
</script> | |||||
</body> | |||||
</html> |
@ -0,0 +1,18 @@ | |||||
/*! | |||||
* Lunr languages, `Danish` language | |||||
* https://github.com/MihaiValentin/lunr-languages | |||||
* | |||||
* Copyright 2014, Mihai Valentin | |||||
* http://www.mozilla.org/MPL/ | |||||
*/ | |||||
/*! | |||||
* based on | |||||
* Snowball JavaScript Library v0.3 | |||||
* http://code.google.com/p/urim/ | |||||
* http://snowball.tartarus.org/ | |||||
* | |||||
* Copyright 2010, Oleg Mazko | |||||
* http://www.mozilla.org/MPL/ | |||||
*/ | |||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){var e,r=f.cursor+3;if(d=f.limit,0<=r&&r<=f.limit){for(a=r;;){if(e=f.cursor,f.in_grouping(w,97,248)){f.cursor=e;break}if(f.cursor=e,e>=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d<a&&(d=a)}}function n(){var e,r;if(f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}}); |
@ -0,0 +1 @@ | |||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n<p.length;n++)r?a.push(new e.Token(p[n],{position:[f,p[n].length],index:a.length})):a.push(p[n]),f+=p[n].length;l=c+1}return a},e.ja.stemmer=function(){return function(e){return e}}(),e.Pipeline.registerFunction(e.ja.stemmer,"stemmer-ja"),e.ja.wordCharacters="一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Za-zA-Z0-90-9",e.ja.trimmer=e.trimmerSupport.generateTrimmer(e.ja.wordCharacters),e.Pipeline.registerFunction(e.ja.trimmer,"trimmer-ja"),e.ja.stopWordFilter=e.generateStopWordFilter("これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" ")),e.Pipeline.registerFunction(e.ja.stopWordFilter,"stopWordFilter-ja"),e.jp=e.ja,e.Pipeline.registerFunction(e.jp.stemmer,"stemmer-jp"),e.Pipeline.registerFunction(e.jp.trimmer,"trimmer-jp"),e.Pipeline.registerFunction(e.jp.stopWordFilter,"stopWordFilter-jp")}}); |
@ -0,0 +1 @@ | |||||
module.exports=require("./lunr.ja"); |
@ -0,0 +1 @@ | |||||
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){e.multiLanguage=function(){for(var t=Array.prototype.slice.call(arguments),i=t.join("-"),r="",n=[],s=[],p=0;p<t.length;++p)"en"==t[p]?(r+="\\w",n.unshift(e.stopWordFilter),n.push(e.stemmer),s.push(e.stemmer)):(r+=e[t[p]].wordCharacters,e[t[p]].stopWordFilter&&n.unshift(e[t[p]].stopWordFilter),e[t[p]].stemmer&&(n.push(e[t[p]].stemmer),s.push(e[t[p]].stemmer)));var o=e.trimmerSupport.generateTrimmer(r);return e.Pipeline.registerFunction(o,"lunr-multi-trimmer-"+i),n.unshift(o),function(){this.pipeline.reset(),this.pipeline.add.apply(this.pipeline,n),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add.apply(this.searchPipeline,s))}}}}); |
@ -0,0 +1,18 @@ | |||||
/*! | |||||
* Lunr languages, `Norwegian` language | |||||
* https://github.com/MihaiValentin/lunr-languages | |||||
* | |||||
* Copyright 2014, Mihai Valentin | |||||
* http://www.mozilla.org/MPL/ | |||||
*/ | |||||
/*! | |||||
* based on | |||||
* Snowball JavaScript Library v0.3 | |||||
* http://code.google.com/p/urim/ | |||||
* http://snowball.tartarus.org/ | |||||
* | |||||
* Copyright 2010, Oleg Mazko | |||||
* http://www.mozilla.org/MPL/ | |||||
*/ | |||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,r=w.cursor+3;if(a=w.limit,0<=r||r<=w.limit){for(s=r;;){if(e=w.cursor,w.in_grouping(d,97,248)){w.cursor=e;break}if(e>=w.limit)return;w.cursor=e+1}for(;!w.out_grouping(d,97,248);){if(w.cursor>=w.limit)return;w.cursor++}a=w.cursor,a<s&&(a=s)}}function i(){var e,r,n;if(w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}}); |
@ -0,0 +1 @@ | |||||
!function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s<t;s++)i[s]=r.charCodeAt(s);return i},!r&&""!=r||!t&&0!=t||!i)throw"Bad Among initialisation: s:"+r+", substring_i: "+t+", result: "+i;this.s_size=r.length,this.s=this.toCharArray(r),this.substring_i=t,this.result=i,this.method=s},SnowballProgram:function(){var r;return{bra:0,ket:0,limit:0,cursor:0,limit_backward:0,setCurrent:function(t){r=t,this.cursor=0,this.limit=t.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},getCurrent:function(){var t=r;return r=null,t},in_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e>s||e<i)return this.cursor++,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e<i)return this.cursor--,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor+s)!=i.charCodeAt(s))return!1;return this.cursor+=t,!0},eq_s_b:function(t,i){if(this.cursor-this.limit_backward<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor-t+s)!=i.charCodeAt(s))return!1;return this.cursor-=t,!0},find_among:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=l;m<_.s_size;m++){if(n+l==u){f=-1;break}if(f=r.charCodeAt(n+l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=_.s_size-1-l;m>=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}}); |
@ -0,0 +1,18 @@ | |||||
/*! | |||||
* Lunr languages, `Swedish` language | |||||
* https://github.com/MihaiValentin/lunr-languages | |||||
* | |||||
* Copyright 2014, Mihai Valentin | |||||
* http://www.mozilla.org/MPL/ | |||||
*/ | |||||
/*! | |||||
* based on | |||||
* Snowball JavaScript Library v0.3 | |||||
* http://code.google.com/p/urim/ | |||||
* http://snowball.tartarus.org/ | |||||
* | |||||
* Copyright 2010, Oleg Mazko | |||||
* http://www.mozilla.org/MPL/ | |||||
*/ | |||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o<a&&(o=a)}}function t(){var e,r=w.limit_backward;if(w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}}); |
@ -0,0 +1 @@ | |||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}}); |
@ -0,0 +1,100 @@ | |||||
.title-bar { | |||||
background-color: #FFC512; | |||||
} | |||||
.title-bar .title-bar__title { | |||||
color: #000133; | |||||
font-family: Iosevka; | |||||
} | |||||
.side-bar .side-bar__menu .side-bar__link:hover, .side-bar .side-bar__menu .side-bar__link.side-bar__link--active { | |||||
color: #B30049; | |||||
} | |||||
h1 { | |||||
color: #EBA80F; | |||||
font-family: Iosevka; | |||||
font-size: 2em; | |||||
} | |||||
h2 { | |||||
color: #0082C9; | |||||
font-family: Iosevka; | |||||
font-size: 1.5em; | |||||
border: 3px solid #DFDFDF; | |||||
padding: 4px; | |||||
text-align: center; | |||||
box-shadow: 0px 0px 15px #888888; | |||||
} | |||||
h3 { | |||||
color: #B30049; | |||||
font-family: Iosevka; | |||||
font-size: 1.2em; | |||||
} | |||||
.p, .kpn-style p:not([class]) { | |||||
font-family: Iosevka; | |||||
} | |||||
body, h1 { | |||||
font-family: Iosevka; | |||||
} | |||||
.h2, .kpn-style h2:not([class]) { | |||||
font-family: Iosevka; | |||||
font-weight: 800; | |||||
} | |||||
.tile { | |||||
box-shadow: 1px 1px 6px #6f6f6f; | |||||
} | |||||
a[rel=prev] { | |||||
display: none; | |||||
} | |||||
a[rel=next] { | |||||
display: none; | |||||
} | |||||
.card-title { | |||||
text-align: center; | |||||
font-size: 1.2em; | |||||
} | |||||
.card-title h4 { | |||||
text-align: center; | |||||
} | |||||
.card-footer { | |||||
text-align: center; | |||||
} | |||||
.card-footer .btn { | |||||
} | |||||
.badge { | |||||
font-size: 50%; | |||||
} | |||||
.card-img-top { | |||||
width: 100%; | |||||
height: 10vw; | |||||
object-fit: cover; | |||||
margin-top: 0.5em; | |||||
} | |||||
.md-typeset a, a { | |||||
color: #0082C9; | |||||
} | |||||
.md-tabs__link { | |||||
color: #F8E7A5; | |||||
} | |||||
.md-tabs__link--active { | |||||
font-weight: 900; | |||||
font-size: 1.6em; | |||||
} | |||||
@ -0,0 +1,416 @@ | |||||
<!doctype html> | |||||
<html lang="en" class="no-js"> | |||||
<head> | |||||
<meta charset="utf-8"> | |||||
<meta name="viewport" content="width=device-width,initial-scale=1"> | |||||
<meta name="description" content="Accessible & Free Documentation for Libre Products"> | |||||
<meta name="author" content="Abhas Abhinav"> | |||||
<link rel="shortcut icon" href="images/lts-icon.png"> | |||||
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.2.4"> | |||||
<title>LibreTechShop - Documentation</title> | |||||
<link rel="stylesheet" href="assets/stylesheets/main.15aa0b43.min.css"> | |||||
<link rel="stylesheet" href="assets/stylesheets/palette.75751829.min.css"> | |||||
<meta name="theme-color" content="#ffffff"> | |||||
<link rel="stylesheet" href="css/extra.css"> | |||||
</head> | |||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" data-md-color-accent="pink"> | |||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> | |||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> | |||||
<label class="md-overlay" for="__drawer"></label> | |||||
<div data-md-component="skip"> | |||||
<a href="#welcome-to-the-libre-tech-shop-documentation" class="md-skip"> | |||||
Skip to content | |||||
</a> | |||||
</div> | |||||
<div data-md-component="announce"> | |||||
</div> | |||||
<header class="md-header" data-md-component="header"> | |||||
<nav class="md-header-nav md-grid" aria-label="Header"> | |||||
<a href="." title="LibreTechShop - Documentation" class="md-header-nav__button md-logo" aria-label="LibreTechShop - Documentation"> | |||||
<img src="images/lts-icon.png" alt="logo"> | |||||
</a> | |||||
<label class="md-header-nav__button md-icon" for="__drawer"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg> | |||||
</label> | |||||
<div class="md-header-nav__title" data-md-component="header-title"> | |||||
<div class="md-header-nav__ellipsis"> | |||||
<div class="md-header-nav__topic"> | |||||
<span class="md-ellipsis"> | |||||
LibreTechShop - Documentation | |||||
</span> | |||||
</div> | |||||
<div class="md-header-nav__topic"> | |||||
<span class="md-ellipsis"> | |||||
Home | |||||
</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<label class="md-header-nav__button md-icon" for="__search"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> | |||||
</label> | |||||
<div class="md-search" data-md-component="search" role="dialog"> | |||||
<label class="md-search__overlay" for="__search"></label> | |||||
<div class="md-search__inner" role="search"> | |||||
<form class="md-search__form" name="search"> | |||||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required> | |||||
<label class="md-search__icon md-icon" for="__search"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> | |||||
</label> | |||||
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg> | |||||
</button> | |||||
</form> | |||||
<div class="md-search__output"> | |||||
<div class="md-search__scrollwrap" data-md-scrollfix> | |||||
<div class="md-search-result" data-md-component="search-result"> | |||||
<div class="md-search-result__meta"> | |||||
Initializing search | |||||
</div> | |||||
<ol class="md-search-result__list"></ol> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</nav> | |||||
</header> | |||||
<div class="md-container" data-md-component="container"> | |||||
<main class="md-main" data-md-component="main"> | |||||
<div class="md-main__inner md-grid"> | |||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation" > | |||||
<div class="md-sidebar__scrollwrap"> | |||||
<div class="md-sidebar__inner"> | |||||
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> | |||||
<label class="md-nav__title" for="__drawer"> | |||||
<a href="." title="LibreTechShop - Documentation" class="md-nav__button md-logo" aria-label="LibreTechShop - Documentation"> | |||||
<img src="images/lts-icon.png" alt="logo"> | |||||
</a> | |||||
LibreTechShop - Documentation | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item md-nav__item--active"> | |||||
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> | |||||
<a href="." class="md-nav__link md-nav__link--active"> | |||||
Home | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item md-nav__item--nested"> | |||||
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" > | |||||
<label class="md-nav__link" for="nav-2"> | |||||
LC230 | |||||
<span class="md-nav__icon md-icon"></span> | |||||
</label> | |||||
<nav class="md-nav" aria-label="LC230" data-md-level="1"> | |||||
<label class="md-nav__title" for="nav-2"> | |||||
<span class="md-nav__icon md-icon"></span> | |||||
LC230 | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href="lc230/" class="md-nav__link"> | |||||
(LC230) Overview | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="lc230/user-guide/" class="md-nav__link"> | |||||
(LC230) User Guide | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="lc230/troubleshooting/" class="md-nav__link"> | |||||
(LC230) Troubleshooting | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="le01/" class="md-nav__link"> | |||||
LE01 | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="ledc/" class="md-nav__link"> | |||||
LEDC | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc" > | |||||
<div class="md-sidebar__scrollwrap"> | |||||
<div class="md-sidebar__inner"> | |||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents"> | |||||
</nav> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="md-content"> | |||||
<article class="md-content__inner md-typeset"> | |||||
<h1 id="welcome-to-the-libre-tech-shop-documentation">Welcome to the Libre Tech Shop Documentation<a class="headerlink" href="#welcome-to-the-libre-tech-shop-documentation" title="Permanent link">¶</a></h1> | |||||
<p>The Libre Tech Shop is a first of its kind online store for products that | |||||
respect your freedom.</p> | |||||
<p>Every product you purchase here will be powered by free software, will be | |||||
accompanied by documentation and will give you the freedom to hack, learn, | |||||
modify and share. These products will not track you and will respect your | |||||
freedom and privacy.</p> | |||||
<h1 id="products">Products<a class="headerlink" href="#products" title="Permanent link">¶</a></h1> | |||||
<table> | |||||
<thead> | |||||
<tr> | |||||
<th>Method</th> | |||||
<th>Description</th> | |||||
</tr> | |||||
</thead> | |||||
<tbody> | |||||
<tr> | |||||
<td><img class="card-img-top" src="/images/lc230.png" style="height: 100px"></td> | |||||
<td><a href="/lc230/">LC230</a> <br> Liberated Computer LC230</td> | |||||
</tr> | |||||
<tr> | |||||
<td><img class="card-img-top" src="/images/libreelec.png" style="height: 100px"></td> | |||||
<td><a href="/le01/">LE01</a> <br> Liberated Entertainment Center LE01</td> | |||||
</tr> | |||||
<tr> | |||||
<td><img class="card-img-top" src="/images/both-rgb-controller.jpg" style="height: 100px"></td> | |||||
<td><a href="/ledc/">LEDC</a> <br> LED Lighting Controller LEDC</td> | |||||
</tr> | |||||
</tbody> | |||||
</table> | |||||
</article> | |||||
</div> | |||||
</div> | |||||
</main> | |||||
<footer class="md-footer"> | |||||
<div class="md-footer-nav"> | |||||
<nav class="md-footer-nav__inner md-grid" aria-label="Footer"> | |||||
<a href="lc230/" class="md-footer-nav__link md-footer-nav__link--next" rel="next"> | |||||
<div class="md-footer-nav__title"> | |||||
<div class="md-ellipsis"> | |||||
<span class="md-footer-nav__direction"> | |||||
Next | |||||
</span> | |||||
(LC230) Overview | |||||
</div> | |||||
</div> | |||||
<div class="md-footer-nav__button md-icon"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg> | |||||
</div> | |||||
</a> | |||||
</nav> | |||||
</div> | |||||
<div class="md-footer-meta md-typeset"> | |||||
<div class="md-footer-meta__inner md-grid"> | |||||
<div class="md-footer-copyright"> | |||||
<div class="md-footer-copyright__highlight"> | |||||
Copyright © Mostly Harmless | |||||
</div> | |||||
Made with | |||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> | |||||
Material for MkDocs | |||||
</a> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</footer> | |||||
</div> | |||||
<script src="assets/javascripts/vendor.93c04032.min.js"></script> | |||||
<script src="assets/javascripts/bundle.83e5331e.min.js"></script><script id="__lang" type="application/json">{"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}</script> | |||||
<script> | |||||
app = initialize({ | |||||
base: ".", | |||||
features: [], | |||||
search: Object.assign({ | |||||
worker: "assets/javascripts/worker/search.8c7e0a7e.min.js" | |||||
}, typeof search !== "undefined" && search) | |||||
}) | |||||
</script> | |||||
</body> | |||||
</html> |
@ -0,0 +1,570 @@ | |||||
<!doctype html> | |||||
<html lang="en" class="no-js"> | |||||
<head> | |||||
<meta charset="utf-8"> | |||||
<meta name="viewport" content="width=device-width,initial-scale=1"> | |||||
<meta name="description" content="Accessible & Free Documentation for Libre Products"> | |||||
<meta name="author" content="Abhas Abhinav"> | |||||
<link rel="shortcut icon" href="../images/lts-icon.png"> | |||||
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.2.4"> | |||||
<title>(LC230) Overview - LibreTechShop - Documentation</title> | |||||
<link rel="stylesheet" href="../assets/stylesheets/main.15aa0b43.min.css"> | |||||
<link rel="stylesheet" href="../assets/stylesheets/palette.75751829.min.css"> | |||||
<meta name="theme-color" content="#ffffff"> | |||||
<link rel="stylesheet" href="../css/extra.css"> | |||||
</head> | |||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" data-md-color-accent="pink"> | |||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> | |||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> | |||||
<label class="md-overlay" for="__drawer"></label> | |||||
<div data-md-component="skip"> | |||||
<a href="#lc230-the-liberated-computer" class="md-skip"> | |||||
Skip to content | |||||
</a> | |||||
</div> | |||||
<div data-md-component="announce"> | |||||
</div> | |||||
<header class="md-header" data-md-component="header"> | |||||
<nav class="md-header-nav md-grid" aria-label="Header"> | |||||
<a href=".." title="LibreTechShop - Documentation" class="md-header-nav__button md-logo" aria-label="LibreTechShop - Documentation"> | |||||
<img src="../images/lts-icon.png" alt="logo"> | |||||
</a> | |||||
<label class="md-header-nav__button md-icon" for="__drawer"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg> | |||||
</label> | |||||
<div class="md-header-nav__title" data-md-component="header-title"> | |||||
<div class="md-header-nav__ellipsis"> | |||||
<div class="md-header-nav__topic"> | |||||
<span class="md-ellipsis"> | |||||
LibreTechShop - Documentation | |||||
</span> | |||||
</div> | |||||
<div class="md-header-nav__topic"> | |||||
<span class="md-ellipsis"> | |||||
(LC230) Overview | |||||
</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<label class="md-header-nav__button md-icon" for="__search"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> | |||||
</label> | |||||
<div class="md-search" data-md-component="search" role="dialog"> | |||||
<label class="md-search__overlay" for="__search"></label> | |||||
<div class="md-search__inner" role="search"> | |||||
<form class="md-search__form" name="search"> | |||||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required> | |||||
<label class="md-search__icon md-icon" for="__search"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> | |||||
</label> | |||||
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg> | |||||
</button> | |||||
</form> | |||||
<div class="md-search__output"> | |||||
<div class="md-search__scrollwrap" data-md-scrollfix> | |||||
<div class="md-search-result" data-md-component="search-result"> | |||||
<div class="md-search-result__meta"> | |||||
Initializing search | |||||
</div> | |||||
<ol class="md-search-result__list"></ol> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</nav> | |||||
</header> | |||||
<div class="md-container" data-md-component="container"> | |||||
<main class="md-main" data-md-component="main"> | |||||
<div class="md-main__inner md-grid"> | |||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation" > | |||||
<div class="md-sidebar__scrollwrap"> | |||||
<div class="md-sidebar__inner"> | |||||
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> | |||||
<label class="md-nav__title" for="__drawer"> | |||||
<a href=".." title="LibreTechShop - Documentation" class="md-nav__button md-logo" aria-label="LibreTechShop - Documentation"> | |||||
<img src="../images/lts-icon.png" alt="logo"> | |||||
</a> | |||||
LibreTechShop - Documentation | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href=".." class="md-nav__link"> | |||||
Home | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested"> | |||||
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" checked> | |||||
<label class="md-nav__link" for="nav-2"> | |||||
LC230 | |||||
<span class="md-nav__icon md-icon"></span> | |||||
</label> | |||||
<nav class="md-nav" aria-label="LC230" data-md-level="1"> | |||||
<label class="md-nav__title" for="nav-2"> | |||||
<span class="md-nav__icon md-icon"></span> | |||||
LC230 | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item md-nav__item--active"> | |||||
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> | |||||
<label class="md-nav__link md-nav__link--active" for="__toc"> | |||||
(LC230) Overview | |||||
<span class="md-nav__icon md-icon"></span> | |||||
</label> | |||||
<a href="./" class="md-nav__link md-nav__link--active"> | |||||
(LC230) Overview | |||||
</a> | |||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents"> | |||||
<label class="md-nav__title" for="__toc"> | |||||
<span class="md-nav__icon md-icon"></span> | |||||
Table of contents | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href="#why-lc230" class="md-nav__link"> | |||||
Why LC230? | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#what-is-coreboot" class="md-nav__link"> | |||||
What is Coreboot? | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#introducing-skulls" class="md-nav__link"> | |||||
Introducing Skulls | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#how-is-an-lc230-assembled" class="md-nav__link"> | |||||
How is an LC230 assembled? | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="user-guide/" class="md-nav__link"> | |||||
(LC230) User Guide | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="troubleshooting/" class="md-nav__link"> | |||||
(LC230) Troubleshooting | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="../le01/" class="md-nav__link"> | |||||
LE01 | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="../ledc/" class="md-nav__link"> | |||||
LEDC | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc" > | |||||
<div class="md-sidebar__scrollwrap"> | |||||
<div class="md-sidebar__inner"> | |||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents"> | |||||
<label class="md-nav__title" for="__toc"> | |||||
<span class="md-nav__icon md-icon"></span> | |||||
Table of contents | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href="#why-lc230" class="md-nav__link"> | |||||
Why LC230? | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#what-is-coreboot" class="md-nav__link"> | |||||
What is Coreboot? | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#introducing-skulls" class="md-nav__link"> | |||||
Introducing Skulls | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#how-is-an-lc230-assembled" class="md-nav__link"> | |||||
How is an LC230 assembled? | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="md-content"> | |||||
<article class="md-content__inner md-typeset"> | |||||
<h1 id="lc230-the-liberated-computer">LC230 - The Liberated Computer<a class="headerlink" href="#lc230-the-liberated-computer" title="Permanent link">¶</a></h1> | |||||
<figure> | |||||
<img src="/images/x230.png"/> | |||||
</figure> | |||||
<h2 id="why-lc230">Why LC230?<a class="headerlink" href="#why-lc230" title="Permanent link">¶</a></h2> | |||||
<p>Why does LC230 exist?</p> | |||||
<p>Some of the most fundamental questions that we need to answer about the hardware that we possess are those of "ownership":</p> | |||||
<div class="admonition question"> | |||||
<p class="admonition-title">Question</p> | |||||
<ul class="task-list"> | |||||
<li class="task-list-item"><label class="task-list-control"><input type="checkbox" disabled/><span class="task-list-indicator"></span></label> What is the definition of owning a piece of hardware? </li> | |||||
<li class="task-list-item"><label class="task-list-control"><input type="checkbox" disabled/><span class="task-list-indicator"></span></label> Are we the owners of the hardware merely because we paid for it and now have possession of it?</li> | |||||
<li class="task-list-item"><label class="task-list-control"><input type="checkbox" disabled/><span class="task-list-indicator"></span></label> If we are owners do we have the necessary freedom and opportunity to do what we want with it? </li> | |||||
<li class="task-list-item"><label class="task-list-control"><input type="checkbox" disabled/><span class="task-list-indicator"></span></label> How much control does the manufacturer of a device exert after "selling" the device to us?</li> | |||||
<li class="task-list-item"><label class="task-list-control"><input type="checkbox" disabled/><span class="task-list-indicator"></span></label> If such control does exist, then how do we re-define ownership now?</li> | |||||
</ul> | |||||
</div> | |||||
<p>The answers to these questions are not easy, universal or simple. Hence, we might define ownership in the following terms:</p> | |||||
<div class="admonition info"> | |||||
<p class="admonition-title">Info</p> | |||||
<p>We are the true owners of our hardware if we can <strong>do whatever we want</strong> with hardware <strong>without then | |||||
permission of the manufacturer</strong>. This includes the <strong>freedom to change or upgrade hardware components</strong> | |||||
at will, <strong>repair and refurbish</strong> the hardware and <strong>install the software we want</strong> (without constraints).</p> | |||||
</div> | |||||
<p>The <strong>"Liberated Computer"</strong> project exists to provide users with convenient access to | |||||
reliable, libre-software friendly and hackable computers. The key to having the freedom to compute in a manner | |||||
we deem respectful is to first liberate the computers from the locks and constraints imposed by the manufacturer.</p> | |||||
<div class="admonition failure"> | |||||
<p class="admonition-title">Failure</p> | |||||
<p><figure> | |||||
<img src="/images/lenovo-error.jpg" /> | |||||
<figcaption style="text-align: justify;"> | |||||
Even 8 years after the model ceased production, Lenovo's BIOS does not give you the freedom to change the | |||||
wireless card of the laptop to one that would work without proprietary firmware! <br> <br> | |||||
This is a classic example of a manufacturer exerting control over the hardware well beyond its intended lifespan. <br> <br> | |||||
Unless a wireless card that is "white-listed" by the BIOS is plugged in, the system will not boot up. The only way to | |||||
move beyond this limitation is to replace the BIOS and hence, liberate the computer. | |||||
</figcaption> | |||||
</figure></p> | |||||
</div> | |||||
<h2 id="what-is-coreboot">What is Coreboot?<a class="headerlink" href="#what-is-coreboot" title="Permanent link">¶</a></h2> | |||||
<p>Coreboot is a free/libre software BIOS replacement. It was developed to allow computers users the ability to exert | |||||
greater control on their computers by being able to control the BIOS. Coreboot is a very modular BIOS and runs on a wide | |||||
variety of computer mainboards. More details are available at: <a href="https://coreboot.org">coreboot.org</a></p> | |||||
<p>Coreboot's main advantage is that of software freedom at the BIOS level. It liberates the computer and allows a | |||||
user to load multiple types of boot payloads while also allowing us to cripple and neuter the Intel ME.</p> | |||||
<p>Some of the common payloads supported by Coreboot are:</p> | |||||
<ul> | |||||
<li>SeaBIOS - the default payload that ships with your LC230</li> | |||||
<li>Linux - you can embed and load a Linux kernel on the BIOS chip</li> | |||||
<li>Grub - You can also daisy-chain and boot Grub from Coreboot so that you can perform the rest of the boot process via Grub</li> | |||||
<li><code>nvramtui</code> - a utility to configure the Embedded Controller (EC) firmware on thinkpad laptops</li> | |||||
<li><code>memtest</code> - perform memory tests at the BIOS level!</li> | |||||
<li><code>coreinfo</code> - provides low-level information about Coreboot</li> | |||||
<li>TINC - play tetris without even booting an OS!</li> | |||||
</ul> | |||||
<div class="admonition info"> | |||||
<p class="admonition-title">Info</p> | |||||
<p><figure> | |||||
<img src="/images/tinc.png" style="height: auto; width: 400px;"/> | |||||
<figcaption style="text-align: justify;"> | |||||
The TINC Coreboot payload - Tetris at the BIOS level. No Operating System! | |||||
</figcaption> | |||||
</figure></p> | |||||
</div> | |||||
<h2 id="introducing-skulls">Introducing Skulls<a class="headerlink" href="#introducing-skulls" title="Permanent link">¶</a></h2> | |||||
<p>The <a href="https://github.com/merge/skulls">Skulls Project</a> is a <a href="https://doc.coreboot.org/distributions.html">Coreboot | |||||
distribution</a>. They ship a | |||||
pre-compiled Coreboot binary for the Lenovo X230 Thinkpad along with a set of | |||||
scripts that make it it simple to install and use it.</p> | |||||
<p>The LC230 ships pre-installed with the latest release of Skulls.</p> | |||||
<h2 id="how-is-an-lc230-assembled">How is an LC230 assembled?<a class="headerlink" href="#how-is-an-lc230-assembled" title="Permanent link">¶</a></h2> | |||||
<p>Your LC230 laptop is refurbished and liberated with a mix of new and used components. Here is the process of refurbishing it:</p> | |||||
<ol> | |||||
<li>We first purchase a used Lenovo x230 Thinkpad laptop</li> | |||||
<li>Once we inspect it for physical and other defects, the process of liberating it starts.</li> | |||||
<li>First the laptop is opened up and cleaned - all the internal and external plus the CPU fan.</li> | |||||
<li>Next using a SIOC-8 clip, coreboot is flashed to SPI flash that is used to store the system firmware.</li> | |||||
<li>Once the sytem is running coreboot, the default Intel wireless card is replaced with an Atheros one.</li> | |||||
<li>After that, based on the requested configuration, a new mSATA or SATA SSD is added, more RAM or even a brand new battery.</li> | |||||
<li>Finally - an OS is installed and the system is tested for heating issues, networking and so on.</li> | |||||
</ol> | |||||
<p>Now your liberated computer is ready for you to play with ! :-) </p> | |||||
</article> | |||||
</div> | |||||
</div> | |||||
</main> | |||||
<footer class="md-footer"> | |||||
<div class="md-footer-nav"> | |||||
<nav class="md-footer-nav__inner md-grid" aria-label="Footer"> | |||||
<a href=".." class="md-footer-nav__link md-footer-nav__link--prev" rel="prev"> | |||||
<div class="md-footer-nav__button md-icon"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> | |||||
</div> | |||||
<div class="md-footer-nav__title"> | |||||
<div class="md-ellipsis"> | |||||
<span class="md-footer-nav__direction"> | |||||
Previous | |||||
</span> | |||||
Home | |||||
</div> | |||||
</div> | |||||
</a> | |||||
<a href="user-guide/" class="md-footer-nav__link md-footer-nav__link--next" rel="next"> | |||||
<div class="md-footer-nav__title"> | |||||
<div class="md-ellipsis"> | |||||
<span class="md-footer-nav__direction"> | |||||
Next | |||||
</span> | |||||
(LC230) User Guide | |||||
</div> | |||||
</div> | |||||
<div class="md-footer-nav__button md-icon"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg> | |||||
</div> | |||||
</a> | |||||
</nav> | |||||
</div> | |||||
<div class="md-footer-meta md-typeset"> | |||||
<div class="md-footer-meta__inner md-grid"> | |||||
<div class="md-footer-copyright"> | |||||
<div class="md-footer-copyright__highlight"> | |||||
Copyright © Mostly Harmless | |||||
</div> | |||||
Made with | |||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> | |||||
Material for MkDocs | |||||
</a> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</footer> | |||||
</div> | |||||
<script src="../assets/javascripts/vendor.93c04032.min.js"></script> | |||||
<script src="../assets/javascripts/bundle.83e5331e.min.js"></script><script id="__lang" type="application/json">{"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}</script> | |||||
<script> | |||||
app = initialize({ | |||||
base: "..", | |||||
features: [], | |||||
search: Object.assign({ | |||||
worker: "../assets/javascripts/worker/search.8c7e0a7e.min.js" | |||||
}, typeof search !== "undefined" && search) | |||||
}) | |||||
</script> | |||||
</body> | |||||
</html> |
@ -0,0 +1,534 @@ | |||||
<!doctype html> | |||||
<html lang="en" class="no-js"> | |||||
<head> | |||||
<meta charset="utf-8"> | |||||
<meta name="viewport" content="width=device-width,initial-scale=1"> | |||||
<meta name="description" content="Accessible & Free Documentation for Libre Products"> | |||||
<meta name="author" content="Abhas Abhinav"> | |||||
<link rel="shortcut icon" href="../../images/lts-icon.png"> | |||||
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.2.4"> | |||||
<title>(LC230) Troubleshooting - LibreTechShop - Documentation</title> | |||||
<link rel="stylesheet" href="../../assets/stylesheets/main.15aa0b43.min.css"> | |||||
<link rel="stylesheet" href="../../assets/stylesheets/palette.75751829.min.css"> | |||||
<meta name="theme-color" content="#ffffff"> | |||||
<link rel="stylesheet" href="../../css/extra.css"> | |||||
</head> | |||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" data-md-color-accent="pink"> | |||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> | |||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> | |||||
<label class="md-overlay" for="__drawer"></label> | |||||
<div data-md-component="skip"> | |||||
<a href="#troubleshooting-common-problems" class="md-skip"> | |||||
Skip to content | |||||
</a> | |||||
</div> | |||||
<div data-md-component="announce"> | |||||
</div> | |||||
<header class="md-header" data-md-component="header"> | |||||
<nav class="md-header-nav md-grid" aria-label="Header"> | |||||
<a href="../.." title="LibreTechShop - Documentation" class="md-header-nav__button md-logo" aria-label="LibreTechShop - Documentation"> | |||||
<img src="../../images/lts-icon.png" alt="logo"> | |||||
</a> | |||||
<label class="md-header-nav__button md-icon" for="__drawer"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg> | |||||
</label> | |||||
<div class="md-header-nav__title" data-md-component="header-title"> | |||||
<div class="md-header-nav__ellipsis"> | |||||
<div class="md-header-nav__topic"> | |||||
<span class="md-ellipsis"> | |||||
LibreTechShop - Documentation | |||||
</span> | |||||
</div> | |||||
<div class="md-header-nav__topic"> | |||||
<span class="md-ellipsis"> | |||||
(LC230) Troubleshooting | |||||
</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<label class="md-header-nav__button md-icon" for="__search"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> | |||||
</label> | |||||
<div class="md-search" data-md-component="search" role="dialog"> | |||||
<label class="md-search__overlay" for="__search"></label> | |||||
<div class="md-search__inner" role="search"> | |||||
<form class="md-search__form" name="search"> | |||||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required> | |||||
<label class="md-search__icon md-icon" for="__search"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> | |||||
</label> | |||||
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg> | |||||
</button> | |||||
</form> | |||||
<div class="md-search__output"> | |||||
<div class="md-search__scrollwrap" data-md-scrollfix> | |||||
<div class="md-search-result" data-md-component="search-result"> | |||||
<div class="md-search-result__meta"> | |||||
Initializing search | |||||
</div> | |||||
<ol class="md-search-result__list"></ol> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</nav> | |||||
</header> | |||||
<div class="md-container" data-md-component="container"> | |||||
<main class="md-main" data-md-component="main"> | |||||
<div class="md-main__inner md-grid"> | |||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation" > | |||||
<div class="md-sidebar__scrollwrap"> | |||||
<div class="md-sidebar__inner"> | |||||
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> | |||||
<label class="md-nav__title" for="__drawer"> | |||||
<a href="../.." title="LibreTechShop - Documentation" class="md-nav__button md-logo" aria-label="LibreTechShop - Documentation"> | |||||
<img src="../../images/lts-icon.png" alt="logo"> | |||||
</a> | |||||
LibreTechShop - Documentation | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href="../.." class="md-nav__link"> | |||||
Home | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested"> | |||||
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" checked> | |||||
<label class="md-nav__link" for="nav-2"> | |||||
LC230 | |||||
<span class="md-nav__icon md-icon"></span> | |||||
</label> | |||||
<nav class="md-nav" aria-label="LC230" data-md-level="1"> | |||||
<label class="md-nav__title" for="nav-2"> | |||||
<span class="md-nav__icon md-icon"></span> | |||||
LC230 | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href="../" class="md-nav__link"> | |||||
(LC230) Overview | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="../user-guide/" class="md-nav__link"> | |||||
(LC230) User Guide | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item md-nav__item--active"> | |||||
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> | |||||
<label class="md-nav__link md-nav__link--active" for="__toc"> | |||||
(LC230) Troubleshooting | |||||
<span class="md-nav__icon md-icon"></span> | |||||
</label> | |||||
<a href="./" class="md-nav__link md-nav__link--active"> | |||||
(LC230) Troubleshooting | |||||
</a> | |||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents"> | |||||
<label class="md-nav__title" for="__toc"> | |||||
<span class="md-nav__icon md-icon"></span> | |||||
Table of contents | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href="#heating-or-fan-issues" class="md-nav__link"> | |||||
Heating or fan issues | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#battery-management" class="md-nav__link"> | |||||
Battery management | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#swapping-the-keyboard" class="md-nav__link"> | |||||
Swapping the keyboard | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="../../le01/" class="md-nav__link"> | |||||
LE01 | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="../../ledc/" class="md-nav__link"> | |||||
LEDC | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc" > | |||||
<div class="md-sidebar__scrollwrap"> | |||||
<div class="md-sidebar__inner"> | |||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents"> | |||||
<label class="md-nav__title" for="__toc"> | |||||
<span class="md-nav__icon md-icon"></span> | |||||
Table of contents | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href="#heating-or-fan-issues" class="md-nav__link"> | |||||
Heating or fan issues | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#battery-management" class="md-nav__link"> | |||||
Battery management | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#swapping-the-keyboard" class="md-nav__link"> | |||||
Swapping the keyboard | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="md-content"> | |||||
<article class="md-content__inner md-typeset"> | |||||
<h1 id="troubleshooting-common-problems">Troubleshooting & Common Problems<a class="headerlink" href="#troubleshooting-common-problems" title="Permanent link">¶</a></h1> | |||||
<h2 id="heating-or-fan-issues">Heating or fan issues<a class="headerlink" href="#heating-or-fan-issues" title="Permanent link">¶</a></h2> | |||||
<p>One possible challenge with a refurbished laptop is that there can be heating | |||||
issues. All LC230 units that we sell are well tested for such issues to ensure | |||||
that the laptop's CPU cools well during heavy CPU usage. This is done by | |||||
ensuring two things:</p> | |||||
<ol> | |||||
<li> | |||||
<p>The CPU fan is clean of dust and other foreign material that might affect | |||||
its ability to offer good CPU cooling.</p> | |||||
</li> | |||||
<li> | |||||
<p>The CPU fan's heatsink is able to conduct heat properly</p> | |||||
</li> | |||||
</ol> | |||||
<p>Check out what a dirty and clean fan looks like.</p> | |||||
<div style="text-align: center"> | |||||
<figure style="display: inline-block" > | |||||
<img src="/images/dirty-fan.jpg" width="250" /> | |||||
<figcaption> A dirty fan! </figcaption> | |||||
</figure> | |||||
| |||||
<figure style="display: inline-block" > | |||||
<img src="/images/clean-fan.jpg" width="250" /> | |||||
<figcaption> A very clean fan! </figcaption> | |||||
</figure> | |||||
</div> | |||||
<p>If you face any heating issues (or a noisy fan) a few months after purchasing a | |||||
LC230, one thing that would help is cleaning the fan using an air blower.</p> | |||||
<p>Here is what a clean CPU fan achieves:</p> | |||||
<figure style="box-shadow: 0px 0px 20px #888888; margin-bottom: -2em;" > | |||||
<img src="/images/htop.png" /> | |||||
</figure> | |||||
<p><br></p> | |||||
<figure style="box-shadow: 0px 0px 20px #888888;" > | |||||
<img src="/images/stress-test.png" /> | |||||
</figure> | |||||
<p>As you can see, even under very heavy CPU utilisation (and system load), the | |||||
CPU fan running at <strong>5380 RPM</strong> is able to cool down the CPU to keep the core | |||||
temperature around +84° C.</p> | |||||
<h2 id="battery-management">Battery management<a class="headerlink" href="#battery-management" title="Permanent link">¶</a></h2> | |||||
<p>In case your current LC230 battery does not give you sufficient backup, you can | |||||
purchase a new 6-cell or 9-cell battery. The part numbers are as follows:</p> | |||||
<ul> | |||||
<li>Lenovo Thinkpad 6-cell Battery 44+ (Part Number: 0A36306)</li> | |||||
<li>Lenovo ThinkPad 9-cell Battery 44++ (Part Number: 0A36307)</li> | |||||
</ul> | |||||
<h2 id="swapping-the-keyboard">Swapping the keyboard<a class="headerlink" href="#swapping-the-keyboard" title="Permanent link">¶</a></h2> | |||||
<p>It is possible to use the Lenovo Classic keyboard (last seen on the X220 | |||||
Thinkpad model) with the X230. This involves three steps:</p> | |||||
<ul> | |||||
<li>Modifying the keyboard connector</li> | |||||
<li>Flashing a modified BIOS (over the default Lenovo one)</li> | |||||
<li>Replacing the palm-rest with an x220 one</li> | |||||
</ul> | |||||
<p>We will be glad to help you with this modification. The steps are detailed on the | |||||
<a href="http://www.thinkwiki.org/wiki/Install_Classic_Keyboard_on_xx30_Series_ThinkPads">Thinkwiki</a>.</p> | |||||
</article> | |||||
</div> | |||||
</div> | |||||
</main> | |||||
<footer class="md-footer"> | |||||
<div class="md-footer-nav"> | |||||
<nav class="md-footer-nav__inner md-grid" aria-label="Footer"> | |||||
<a href="../user-guide/" class="md-footer-nav__link md-footer-nav__link--prev" rel="prev"> | |||||
<div class="md-footer-nav__button md-icon"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> | |||||
</div> | |||||
<div class="md-footer-nav__title"> | |||||
<div class="md-ellipsis"> | |||||
<span class="md-footer-nav__direction"> | |||||
Previous | |||||
</span> | |||||
(LC230) User Guide | |||||
</div> | |||||
</div> | |||||
</a> | |||||
<a href="../../le01/" class="md-footer-nav__link md-footer-nav__link--next" rel="next"> | |||||
<div class="md-footer-nav__title"> | |||||
<div class="md-ellipsis"> | |||||
<span class="md-footer-nav__direction"> | |||||
Next | |||||
</span> | |||||
LE01 | |||||
</div> | |||||
</div> | |||||
<div class="md-footer-nav__button md-icon"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg> | |||||
</div> | |||||
</a> | |||||
</nav> | |||||
</div> | |||||
<div class="md-footer-meta md-typeset"> | |||||
<div class="md-footer-meta__inner md-grid"> | |||||
<div class="md-footer-copyright"> | |||||
<div class="md-footer-copyright__highlight"> | |||||
Copyright © Mostly Harmless | |||||
</div> | |||||
Made with | |||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> | |||||
Material for MkDocs | |||||
</a> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</footer> | |||||
</div> | |||||
<script src="../../assets/javascripts/vendor.93c04032.min.js"></script> | |||||
<script src="../../assets/javascripts/bundle.83e5331e.min.js"></script><script id="__lang" type="application/json">{"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}</script> | |||||
<script> | |||||
app = initialize({ | |||||
base: "../..", | |||||
features: [], | |||||
search: Object.assign({ | |||||
worker: "../../assets/javascripts/worker/search.8c7e0a7e.min.js" | |||||
}, typeof search !== "undefined" && search) | |||||
}) | |||||
</script> | |||||
</body> | |||||
</html> |
@ -0,0 +1,984 @@ | |||||
<!doctype html> | |||||
<html lang="en" class="no-js"> | |||||
<head> | |||||
<meta charset="utf-8"> | |||||
<meta name="viewport" content="width=device-width,initial-scale=1"> | |||||
<meta name="description" content="Accessible & Free Documentation for Libre Products"> | |||||
<meta name="author" content="Abhas Abhinav"> | |||||
<link rel="shortcut icon" href="../../images/lts-icon.png"> | |||||
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.2.4"> | |||||
<title>(LC230) User Guide - LibreTechShop - Documentation</title> | |||||
<link rel="stylesheet" href="../../assets/stylesheets/main.15aa0b43.min.css"> | |||||
<link rel="stylesheet" href="../../assets/stylesheets/palette.75751829.min.css"> | |||||
<meta name="theme-color" content="#ffffff"> | |||||
<link rel="stylesheet" href="../../css/extra.css"> | |||||
</head> | |||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" data-md-color-accent="pink"> | |||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> | |||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> | |||||
<label class="md-overlay" for="__drawer"></label> | |||||
<div data-md-component="skip"> | |||||
<a href="#lc230-user-guide" class="md-skip"> | |||||
Skip to content | |||||
</a> | |||||
</div> | |||||
<div data-md-component="announce"> | |||||
</div> | |||||
<header class="md-header" data-md-component="header"> | |||||
<nav class="md-header-nav md-grid" aria-label="Header"> | |||||
<a href="../.." title="LibreTechShop - Documentation" class="md-header-nav__button md-logo" aria-label="LibreTechShop - Documentation"> | |||||
<img src="../../images/lts-icon.png" alt="logo"> | |||||
</a> | |||||
<label class="md-header-nav__button md-icon" for="__drawer"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg> | |||||
</label> | |||||
<div class="md-header-nav__title" data-md-component="header-title"> | |||||
<div class="md-header-nav__ellipsis"> | |||||
<div class="md-header-nav__topic"> | |||||
<span class="md-ellipsis"> | |||||
LibreTechShop - Documentation | |||||
</span> | |||||
</div> | |||||
<div class="md-header-nav__topic"> | |||||
<span class="md-ellipsis"> | |||||
(LC230) User Guide | |||||
</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<label class="md-header-nav__button md-icon" for="__search"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> | |||||
</label> | |||||
<div class="md-search" data-md-component="search" role="dialog"> | |||||
<label class="md-search__overlay" for="__search"></label> | |||||
<div class="md-search__inner" role="search"> | |||||
<form class="md-search__form" name="search"> | |||||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required> | |||||
<label class="md-search__icon md-icon" for="__search"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> | |||||
</label> | |||||
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg> | |||||
</button> | |||||
</form> | |||||
<div class="md-search__output"> | |||||
<div class="md-search__scrollwrap" data-md-scrollfix> | |||||
<div class="md-search-result" data-md-component="search-result"> | |||||
<div class="md-search-result__meta"> | |||||
Initializing search | |||||
</div> | |||||
<ol class="md-search-result__list"></ol> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</nav> | |||||
</header> | |||||
<div class="md-container" data-md-component="container"> | |||||
<main class="md-main" data-md-component="main"> | |||||
<div class="md-main__inner md-grid"> | |||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation" > | |||||
<div class="md-sidebar__scrollwrap"> | |||||
<div class="md-sidebar__inner"> | |||||
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> | |||||
<label class="md-nav__title" for="__drawer"> | |||||
<a href="../.." title="LibreTechShop - Documentation" class="md-nav__button md-logo" aria-label="LibreTechShop - Documentation"> | |||||
<img src="../../images/lts-icon.png" alt="logo"> | |||||
</a> | |||||
LibreTechShop - Documentation | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href="../.." class="md-nav__link"> | |||||
Home | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested"> | |||||
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" checked> | |||||
<label class="md-nav__link" for="nav-2"> | |||||
LC230 | |||||
<span class="md-nav__icon md-icon"></span> | |||||
</label> | |||||
<nav class="md-nav" aria-label="LC230" data-md-level="1"> | |||||
<label class="md-nav__title" for="nav-2"> | |||||
<span class="md-nav__icon md-icon"></span> | |||||
LC230 | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href="../" class="md-nav__link"> | |||||
(LC230) Overview | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item md-nav__item--active"> | |||||
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> | |||||
<label class="md-nav__link md-nav__link--active" for="__toc"> | |||||
(LC230) User Guide | |||||
<span class="md-nav__icon md-icon"></span> | |||||
</label> | |||||
<a href="./" class="md-nav__link md-nav__link--active"> | |||||
(LC230) User Guide | |||||
</a> | |||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents"> | |||||
<label class="md-nav__title" for="__toc"> | |||||
<span class="md-nav__icon md-icon"></span> | |||||
Table of contents | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href="#the-coreboot-boot-process" class="md-nav__link"> | |||||
The Coreboot Boot Process | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#installing-an-os" class="md-nav__link"> | |||||
Installing an OS | |||||
</a> | |||||
<nav class="md-nav" aria-label="Installing an OS"> | |||||
<ul class="md-nav__list"> | |||||
<li class="md-nav__item"> | |||||
<a href="#build-usb-installer" class="md-nav__link"> | |||||
Build USB Installer | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#plug-in-usb-disk" class="md-nav__link"> | |||||
Plug-in USB Disk | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#choose-the-boot-device" class="md-nav__link"> | |||||
Choose the boot device | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#install-the-os" class="md-nav__link"> | |||||
Install the OS | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#coreboot-internal-flashing" class="md-nav__link"> | |||||
Coreboot Internal Flashing | |||||
</a> | |||||
<nav class="md-nav" aria-label="Coreboot Internal Flashing"> | |||||
<ul class="md-nav__list"> | |||||
<li class="md-nav__item"> | |||||
<a href="#configure-the-kernel" class="md-nav__link"> | |||||
Configure the kernel | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#query-coreboot-details" class="md-nav__link"> | |||||
Query Coreboot details | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#install-flashrom" class="md-nav__link"> | |||||
Install: flashrom | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#read-bios-image" class="md-nav__link"> | |||||
Read BIOS Image | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#write-bios-image" class="md-nav__link"> | |||||
Write BIOS Image | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#flash-skulls" class="md-nav__link"> | |||||
Flash: Skulls | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#flash-heads" class="md-nav__link"> | |||||
Flash: Heads | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#configuring-coreboot" class="md-nav__link"> | |||||
Configuring Coreboot | |||||
</a> | |||||
<nav class="md-nav" aria-label="Configuring Coreboot"> | |||||
<ul class="md-nav__list"> | |||||
<li class="md-nav__item"> | |||||
<a href="#swapping-fn-and-ctrl" class="md-nav__link"> | |||||
Swapping Fn and Ctrl | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#increasing-graphics-memory" class="md-nav__link"> | |||||
Increasing Graphics Memory | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#other-settings" class="md-nav__link"> | |||||
Other settings | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="../troubleshooting/" class="md-nav__link"> | |||||
(LC230) Troubleshooting | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="../../le01/" class="md-nav__link"> | |||||
LE01 | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="../../ledc/" class="md-nav__link"> | |||||
LEDC | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc" > | |||||
<div class="md-sidebar__scrollwrap"> | |||||
<div class="md-sidebar__inner"> | |||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents"> | |||||
<label class="md-nav__title" for="__toc"> | |||||
<span class="md-nav__icon md-icon"></span> | |||||
Table of contents | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href="#the-coreboot-boot-process" class="md-nav__link"> | |||||
The Coreboot Boot Process | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#installing-an-os" class="md-nav__link"> | |||||
Installing an OS | |||||
</a> | |||||
<nav class="md-nav" aria-label="Installing an OS"> | |||||
<ul class="md-nav__list"> | |||||
<li class="md-nav__item"> | |||||
<a href="#build-usb-installer" class="md-nav__link"> | |||||
Build USB Installer | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#plug-in-usb-disk" class="md-nav__link"> | |||||
Plug-in USB Disk | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#choose-the-boot-device" class="md-nav__link"> | |||||
Choose the boot device | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#install-the-os" class="md-nav__link"> | |||||
Install the OS | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#coreboot-internal-flashing" class="md-nav__link"> | |||||
Coreboot Internal Flashing | |||||
</a> | |||||
<nav class="md-nav" aria-label="Coreboot Internal Flashing"> | |||||
<ul class="md-nav__list"> | |||||
<li class="md-nav__item"> | |||||
<a href="#configure-the-kernel" class="md-nav__link"> | |||||
Configure the kernel | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#query-coreboot-details" class="md-nav__link"> | |||||
Query Coreboot details | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#install-flashrom" class="md-nav__link"> | |||||
Install: flashrom | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#read-bios-image" class="md-nav__link"> | |||||
Read BIOS Image | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#write-bios-image" class="md-nav__link"> | |||||
Write BIOS Image | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#flash-skulls" class="md-nav__link"> | |||||
Flash: Skulls | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#flash-heads" class="md-nav__link"> | |||||
Flash: Heads | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#configuring-coreboot" class="md-nav__link"> | |||||
Configuring Coreboot | |||||
</a> | |||||
<nav class="md-nav" aria-label="Configuring Coreboot"> | |||||
<ul class="md-nav__list"> | |||||
<li class="md-nav__item"> | |||||
<a href="#swapping-fn-and-ctrl" class="md-nav__link"> | |||||
Swapping Fn and Ctrl | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#increasing-graphics-memory" class="md-nav__link"> | |||||
Increasing Graphics Memory | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="#other-settings" class="md-nav__link"> | |||||
Other settings | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="md-content"> | |||||
<article class="md-content__inner md-typeset"> | |||||
<h1 id="lc230-user-guide">(LC230) User Guide<a class="headerlink" href="#lc230-user-guide" title="Permanent link">¶</a></h1> | |||||
<h2 id="the-coreboot-boot-process">The Coreboot Boot Process<a class="headerlink" href="#the-coreboot-boot-process" title="Permanent link">¶</a></h2> | |||||
<p>Here is what the boot process looks like with Coreboot installed:</p> | |||||
<figure> | |||||
<img src="/images/coreboot-diagram.png" width="420" /> | |||||
<figcaption>Coreboot Sequence Diagram</figcaption> | |||||
</figure> | |||||
<p>The first part of the boot process (labelled as "Coreboot Internal" in the diagram above) is | |||||
largely hidden from the user. The boot process is illustrated below:</p> | |||||
<figure> | |||||
<img src="/images/lc230-boot.gif" width="420" /> | |||||
<figcaption>LC230 Boot Process</figcaption> | |||||
</figure> | |||||
<h2 id="installing-an-os">Installing an OS<a class="headerlink" href="#installing-an-os" title="Permanent link">¶</a></h2> | |||||
<p>To install any GNU/Linux OS, here is a sequence of steps:</p> | |||||
<h3 id="build-usb-installer">Build USB Installer<a class="headerlink" href="#build-usb-installer" title="Permanent link">¶</a></h3> | |||||
<p>Any GNU/Linux OS would work very well on your LC230 laptop. (Some owners have | |||||
also installed and used FreeBSD on it.)</p> | |||||
<p>LC230 is configured to run without any proprietary firmware and hence, any of | |||||
the following operating systems would work well by default:</p> | |||||
<ul> | |||||
<li><a href="https://debian.org">Debian GNU/Linux (main)</a></li> | |||||
<li><a href="https://pureos.net/">PureOS</a></li> | |||||
<li><a href="https://trisquel.info/">Triquel</a></li> | |||||
</ul> | |||||
<div class="admonition tip"> | |||||
<p class="admonition-title">Tip</p> | |||||
<p>The <a href="https://www.raspberrypi.org/software/">Rasperrby Pi Imager</a> is a good | |||||
tool to use to write an OS image to a USB disk. <a href="https://www.balena.io/etcher/">Balena Etcher</a> is another | |||||
one.</p> | |||||
</div> | |||||
<h3 id="plug-in-usb-disk">Plug-in USB Disk<a class="headerlink" href="#plug-in-usb-disk" title="Permanent link">¶</a></h3> | |||||
<p>The USB needs to be plugged in before you reboot the laptop - or else SeaBIOS | |||||
will not detect it and show it as a boot option.</p> | |||||
<div class="admonition info"> | |||||
<p class="admonition-title">Info</p> | |||||
<p>The blue USB ports on the left side of the laptop are USB3 ports. If you | |||||
have a USB disk that works with USB3, then using these ports will give you | |||||
much better USB disk performance.</p> | |||||
<p>The USB port on the right side (yellow in colour) is a USB2 port.</p> | |||||
</div> | |||||
<h3 id="choose-the-boot-device">Choose the boot device<a class="headerlink" href="#choose-the-boot-device" title="Permanent link">¶</a></h3> | |||||
<p>Press <span class="keys"><kbd class="key-escape">Esc</kbd></span> on boot and choose the USB disk as the boot device</p> | |||||
<figure> | |||||
<img src="/images/lc230-boot-logo.jpg" width="400" /> | |||||
<figcaption>LC230 Boot Image</figcaption> | |||||
</figure> | |||||
<p>By default, the first boot option is chosen to boot off. This is usually the | |||||
2.5" SATA disk if it is plugged in to the laptop. To choose another boot | |||||
device, you need to press <span class="keys"><kbd class="key-escape">Esc</kbd></span> and then choose the desired boot device | |||||
from the SeaBIOS menu.</p> | |||||
<p>If you have a 2.5" SATA disk, then a USB disk would be the second boot device. | |||||
If you have a 2.5" SATA disk <strong>and</strong> a mSATA disk, then the USB disk would be | |||||
the third boot device.</p> | |||||
<figure> | |||||
<img src="/images/lc230-usb3.jpg"/> | |||||
<figcaption>LC230 USB3 Ports</figcaption> | |||||
</figure> | |||||
<h3 id="install-the-os">Install the OS<a class="headerlink" href="#install-the-os" title="Permanent link">¶</a></h3> | |||||
<p>You can now proceed with the OS installation as normal.</p> | |||||
<p>The LC230 does not provide a UEFI BIOS (like the default Lenovo BIOS firmware). | |||||
SeaBIOS is a pc-bios payload and most GNU/Linux OS installers will detect that | |||||
and install the correct bootloader. This would be <code>grub-pc</code> if you choose to | |||||
use Grub and Debian.</p> | |||||
<h2 id="coreboot-internal-flashing">Coreboot Internal Flashing<a class="headerlink" href="#coreboot-internal-flashing" title="Permanent link">¶</a></h2> | |||||
<p>To flash Coreboot to the x230 motherboard, the first step is to flash the BIOS | |||||
externally - ie. using a SIOC-8 flashing clip connecting to the BIOS chips:</p> | |||||
<figure> | |||||
<img src="/images/x230-flashing.png"/> | |||||
<figcaption>Liberating the LC230 via External Flashing</figcaption> | |||||
</figure> | |||||
<p>However, as a part of the external flashing process, the BIOS is unlocked. This | |||||
means that you can update / modify the BIOS on the SPI Flash internally - from | |||||
within the operating system. Here are some reasons to do that and the steps | |||||
involved.</p> | |||||
<h3 id="configure-the-kernel">Configure the kernel<a class="headerlink" href="#configure-the-kernel" title="Permanent link">¶</a></h3> | |||||
<p>The first things to do before you can flash Coreboot internally, is to boot the | |||||
kernel with an additional option:</p> | |||||
<div class="codehilite"><pre><span></span><code>iomem=relaxed | |||||
</code></pre></div> | |||||
<p>On Debian (and derived operating systems such as Ubuntu), you can make this a | |||||
permanent setting:</p> | |||||
<ol> | |||||
<li>Edit the file: <code>/etc/default/grub</code></li> | |||||
<li> | |||||
<p>Update the line <code>GRUB_CMDLINE_LINUX</code> to read:</p> | |||||
<p><code>GRUB_CMDLINE_LINUX="iomem=relaxed"</code></p> | |||||
</li> | |||||
<li> | |||||
<p>Run: <code>update-grub</code> to update the Grub configuration.</p> | |||||
</li> | |||||
</ol> | |||||
<h3 id="query-coreboot-details">Query Coreboot details<a class="headerlink" href="#query-coreboot-details" title="Permanent link">¶</a></h3> | |||||
<p>You can verify the coreboot version (as well as the fact that you're running | |||||
coreboot) by using the <code>dmidecode</code> utility as follows:</p> | |||||
<h4>BIOS version</h4> | |||||
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>sudo dmidecode -t bios | |||||
<span class="gp"># </span>dmidecode <span class="m">3</span>.3 | |||||
<span class="go">Getting SMBIOS data from sysfs.</span> | |||||
<span class="go">SMBIOS 2.8 present.</span> | |||||
<span class="go">Handle 0x0000, DMI type 0, 26 bytes</span> | |||||
<span class="go">BIOS Information</span> | |||||
<span class="go"> Vendor: coreboot</span> | |||||
<span class="go"> Version: CBET4000 4.10-1082-g4357a82076-dirty</span> | |||||
<span class="go"> Release Date: 10/20/2019</span> | |||||
<span class="go"> ROM Size: 12 MB</span> | |||||
<span class="go"> Characteristics:</span> | |||||
<span class="go"> PCI is supported</span> | |||||
<span class="go"> PC Card (PCMCIA) is supported</span> | |||||
<span class="go"> BIOS is upgradeable</span> | |||||
<span class="go"> Selectable boot is supported</span> | |||||
<span class="go"> ACPI is supported</span> | |||||
<span class="go"> Targeted content distribution is supported</span> | |||||
<span class="go"> BIOS Revision: 4.10</span> | |||||
<span class="go"> Firmware Revision: 0.0</span> | |||||
</code></pre></div> | |||||
<h4>System type & name</h4> | |||||
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>sudo dmidecode -t system | |||||
<span class="gp"># </span>dmidecode <span class="m">3</span>.3 | |||||
<span class="go">Getting SMBIOS data from sysfs.</span> | |||||
<span class="go">SMBIOS 2.8 present.</span> | |||||
<span class="go">Handle 0x0001, DMI type 1, 27 bytes</span> | |||||
<span class="go">System Information</span> | |||||
<span class="go"> Manufacturer: LENOVO</span> | |||||
<span class="go"> Product Name: 2325BU3</span> | |||||
<span class="go"> Version: ThinkPad X230</span> | |||||
<span class="go"> Serial Number: PK1HM8E</span> | |||||
<span class="go"> UUID: ce136601-xxxx-xxxx-xxxx-xxxxxxxxxxxx</span> | |||||
<span class="go"> Wake-up Type: Reserved</span> | |||||
<span class="go"> SKU Number: Not Specified</span> | |||||
<span class="go"> Family: ThinkPad X230</span> | |||||
<span class="go">Handle 0x000B, DMI type 32, 11 bytes</span> | |||||
<span class="go">System Boot Information</span> | |||||
<span class="go"> Status: No errors detected</span> | |||||
</code></pre></div> | |||||
<h3 id="install-flashrom">Install: <code>flashrom</code><a class="headerlink" href="#install-flashrom" title="Permanent link">¶</a></h3> | |||||
<p>The primary tool for operating on your BIOS is called <code>flashrom</code>. The Debian | |||||
package is also called by the same name and can be installed as:</p> | |||||
<div class="codehilite"><pre><span></span><code>apt-get install flashrom | |||||
</code></pre></div> | |||||
<p>If the kernel is booted correctly with <code>iomem=relaxed</code>, you can run <code>flashrom</code>:</p> | |||||
<div class="codehilite"><pre><span></span><code>flashrom -pinternal | |||||
</code></pre></div> | |||||
<p>Ouput:</p> | |||||
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>sudo flashrom -pinternal | |||||
<span class="go">flashrom v1.2 on Linux 5.10.9-gnu (x86_64)</span> | |||||
<span class="go">flashrom is free software, get the source code at https://flashrom.org</span> | |||||
<span class="go">Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).</span> | |||||
<span class="go">coreboot table found at 0xbff51000.</span> | |||||
<span class="go">Found chipset "Intel QM77".</span> | |||||
<span class="go">Enabling flash write... SPI Configuration is locked down.</span> | |||||
<span class="go">Enabling hardware sequencing due to multiple flash chips detected.</span> | |||||
<span class="go">OK.</span> | |||||
<span class="go">Found Programmer flash chip "Opaque flash chip" (12288 kB, Programmer-specific) mapped at physical address 0x0000000000000000.</span> | |||||
<span class="go">No operations were specified.</span> | |||||
</code></pre></div> | |||||
<div class="admonition tip"> | |||||
<p class="admonition-title">Tip</p> | |||||
<p>Sometimes <code>flashrom</code> will not detect the internal flash chip, though it | |||||
might very well be able to confirm the BIOS type and machine name. In such | |||||
cases, you can try to run <code>flashrom</code> as: <code>flashrom | |||||
-pinternal:laptop=force_I_want_a_brick</code>. This is not completely safe</p> | |||||
</div> | |||||
<h3 id="read-bios-image">Read BIOS Image<a class="headerlink" href="#read-bios-image" title="Permanent link">¶</a></h3> | |||||
<p>You can dump the BIOS to a file:</p> | |||||
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>flashrom -pinternal -r lc230-coreboot.rom | |||||
</code></pre></div> | |||||
<p>This will read the BIOS to a file: <code>lc230-coreboot.rom</code>. This file will be 12 MB in size.</p> | |||||
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>sudo flashrom -pinternal -r lc230.rom | |||||
<span class="go">flashrom v1.2 on Linux 5.10.9-gnu (x86_64)</span> | |||||
<span class="go">flashrom is free software, get the source code at https://flashrom.org</span> | |||||
<span class="go">Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).</span> | |||||
<span class="go">coreboot table found at 0xbff51000.</span> | |||||
<span class="go">Found chipset "Intel QM77".</span> | |||||
<span class="go">Enabling flash write... SPI Configuration is locked down.</span> | |||||
<span class="go">Enabling hardware sequencing due to multiple flash chips detected.</span> | |||||
<span class="go">OK.</span> | |||||
<span class="go">Found Programmer flash chip "Opaque flash chip" (12288 kB, Programmer-specific) mapped at physical address 0x0000000000000000.</span> | |||||
<span class="go">Reading flash... done.</span> | |||||
<span class="gp">$ </span>ls -lh lc230-coreboot.rom | |||||
<span class="go">-rw-r--r-- 1 root root 12M Feb 8 04:46 lc230-coreboot.rom</span> | |||||
</code></pre></div> | |||||
<h3 id="write-bios-image">Write BIOS Image<a class="headerlink" href="#write-bios-image" title="Permanent link">¶</a></h3> | |||||
<p>You can now write back to the BIOS chips as follows:</p> | |||||
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>sudo flashrom -pinternal -w lc230-coreboot.rom | |||||
<span class="go">flashrom v1.2 on Linux 5.10.9-gnu (x86_64)</span> | |||||
<span class="go">flashrom is free software, get the source code at https://flashrom.org</span> | |||||
<span class="go">Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).</span> | |||||
<span class="go">coreboot table found at 0xbff51000.</span> | |||||
<span class="go">Found chipset "Intel QM77".</span> | |||||
<span class="go">Enabling flash write... SPI Configuration is locked down.</span> | |||||
<span class="go">Enabling hardware sequencing due to multiple flash chips detected.</span> | |||||
<span class="go">OK.</span> | |||||
<span class="go">Found Programmer flash chip "Opaque flash chip" (12288 kB, Programmer-specific) mapped at physical address 0x0000000000000000.</span> | |||||
<span class="go">Reading old flash chip contents... done.</span> | |||||
<span class="go">Erasing and writing flash chip... </span> | |||||
<span class="go">Warning: Chip content is identical to the requested image.</span> | |||||
<span class="go">Erase/write done</span> | |||||
</code></pre></div> | |||||
<h3 id="flash-skulls">Flash: Skulls<a class="headerlink" href="#flash-skulls" title="Permanent link">¶</a></h3> | |||||
<p>The Skulls Coreboot distribution provides built in scripts to upgrade the BIOS. | |||||
The update procedure is <a href="https://github.com/merge/skulls/blob/master/x230/README.md#updating">detailed | |||||
here</a>. | |||||
Your LC230 ships with the latest release of Skull available at the time of | |||||
shipping the laptop to you. You can upgrade skulls using the instructions above. </p> | |||||
<h3 id="flash-heads">Flash: Heads<a class="headerlink" href="#flash-heads" title="Permanent link">¶</a></h3> | |||||
<p>If you want to experiment with the <a href="https://osresearch.net/">Heads firmware</a>, | |||||
instructions are available on the <a href="https://osresearch.net/">Heads website</a> as | |||||
well as in the <a href="https://github.com/merge/skulls/blob/master/x230/README.md#moving-to-heads">Skulls documentation</a>.</p> | |||||
<h2 id="configuring-coreboot">Configuring Coreboot<a class="headerlink" href="#configuring-coreboot" title="Permanent link">¶</a></h2> | |||||
<p>Your LC230 ships with a SeaBIOS payload called <code>nvramcui</code> that allows you to | |||||
configure coreboot behaviour and save the settings to nvram.</p> | |||||
<div style="text-align: center"> | |||||
<figure style="display: inline-block" > | |||||
<img src="/images/nvramcui-1.jpg" width="250" /> | |||||
<figcaption> nvramcui options (1) </figcaption> | |||||
</figure> | |||||
<figure style="display: inline-block" > | |||||
<img src="/images/nvramcui-2.jpg" width="235" /> | |||||
<figcaption> nvramcui options (2) </figcaption> | |||||
</figure> | |||||
<figure style="display: inline-block" > | |||||
<img src="/images/nvramcui-3.jpg" width="235" /> | |||||
<figcaption> nvramcui options (3) </figcaption> | |||||
</figure> | |||||
</div> | |||||
<h3 id="swapping-fn-and-ctrl">Swapping <span class="keys"><kbd class="key-function">Fn</kbd></span> and <span class="keys"><kbd class="key-control">Ctrl</kbd></span><a class="headerlink" href="#swapping-fn-and-ctrl" title="Permanent link">¶</a></h3> | |||||
<p>The <code>fn_ctrl_swap</code> on the 2<sup>nd</sup> page of the <code>nvramcui</code> settings page enables you | |||||
to toggle the <span class="keys"><kbd class="key-function">Fn</kbd></span> and <span class="keys"><kbd class="key-control">Ctrl</kbd></span> swap. If you like to have the control key | |||||
on the bottom left corner of the keyboard, then you can set this option to <code>Enable</code>.</p> | |||||
<h3 id="increasing-graphics-memory">Increasing Graphics Memory<a class="headerlink" href="#increasing-graphics-memory" title="Permanent link">¶</a></h3> | |||||
<p>The x230 GPU does not have dedication RAM. Instead it shares its memory with | |||||
the main system memory. You can configure how much RAM is dedicated to the GPU | |||||
via the <code>gfx_uma_size</code> option on the 3<sup>rd</sup> page of the <code>nvramcui</code> settings.</p> | |||||
<p>Pressing the <span class="keys"><kbd class="key-arrow-left">Left</kbd></span> and <span class="keys"><kbd class="key-arrow-right">Right</kbd></span> arrow keys you can iterate over all the | |||||
available settings for this option.</p> | |||||
<h3 id="other-settings">Other settings<a class="headerlink" href="#other-settings" title="Permanent link">¶</a></h3> | |||||
<p>You can also configure the following behaviour via nvramcui:</p> | |||||
<ul> | |||||
<li> | |||||
<p><strong>Always On USB</strong>: By enabling this option, you can configure the USB ports | |||||
to be <em>always on</em> - even when the laptop is suspended.</p> | |||||
</li> | |||||
<li> | |||||
<p><strong>Enable/Disable Trackpoing, Touchpad</strong>: You can toggle the <code>touchpad</code> and | |||||
<code>trackpoint</code> options to enable or disable the the touchpad and trackpoint | |||||
respectively.</p> | |||||
</li> | |||||
</ul> | |||||
</article> | |||||
</div> | |||||
</div> | |||||
</main> | |||||
<footer class="md-footer"> | |||||
<div class="md-footer-nav"> | |||||
<nav class="md-footer-nav__inner md-grid" aria-label="Footer"> | |||||
<a href="../" class="md-footer-nav__link md-footer-nav__link--prev" rel="prev"> | |||||
<div class="md-footer-nav__button md-icon"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> | |||||
</div> | |||||
<div class="md-footer-nav__title"> | |||||
<div class="md-ellipsis"> | |||||
<span class="md-footer-nav__direction"> | |||||
Previous | |||||
</span> | |||||
(LC230) Overview | |||||
</div> | |||||
</div> | |||||
</a> | |||||
<a href="../troubleshooting/" class="md-footer-nav__link md-footer-nav__link--next" rel="next"> | |||||
<div class="md-footer-nav__title"> | |||||
<div class="md-ellipsis"> | |||||
<span class="md-footer-nav__direction"> | |||||
Next | |||||
</span> | |||||
(LC230) Troubleshooting | |||||
</div> | |||||
</div> | |||||
<div class="md-footer-nav__button md-icon"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg> | |||||
</div> | |||||
</a> | |||||
</nav> | |||||
</div> | |||||
<div class="md-footer-meta md-typeset"> | |||||
<div class="md-footer-meta__inner md-grid"> | |||||
<div class="md-footer-copyright"> | |||||
<div class="md-footer-copyright__highlight"> | |||||
Copyright © Mostly Harmless | |||||
</div> | |||||
Made with | |||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> | |||||
Material for MkDocs | |||||
</a> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</footer> | |||||
</div> | |||||
<script src="../../assets/javascripts/vendor.93c04032.min.js"></script> | |||||
<script src="../../assets/javascripts/bundle.83e5331e.min.js"></script><script id="__lang" type="application/json">{"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}</script> | |||||
<script> | |||||
app = initialize({ | |||||
base: "../..", | |||||
features: [], | |||||
search: Object.assign({ | |||||
worker: "../../assets/javascripts/worker/search.8c7e0a7e.min.js" | |||||
}, typeof search !== "undefined" && search) | |||||
}) | |||||
</script> | |||||
</body> | |||||
</html> |
@ -0,0 +1,405 @@ | |||||
<!doctype html> | |||||
<html lang="en" class="no-js"> | |||||
<head> | |||||
<meta charset="utf-8"> | |||||
<meta name="viewport" content="width=device-width,initial-scale=1"> | |||||
<meta name="description" content="Accessible & Free Documentation for Libre Products"> | |||||
<meta name="author" content="Abhas Abhinav"> | |||||
<link rel="shortcut icon" href="../images/lts-icon.png"> | |||||
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.2.4"> | |||||
<title>LE01 - LibreTechShop - Documentation</title> | |||||
<link rel="stylesheet" href="../assets/stylesheets/main.15aa0b43.min.css"> | |||||
<link rel="stylesheet" href="../assets/stylesheets/palette.75751829.min.css"> | |||||
<meta name="theme-color" content="#ffffff"> | |||||
<link rel="stylesheet" href="../css/extra.css"> | |||||
</head> | |||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" data-md-color-accent="pink"> | |||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> | |||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> | |||||
<label class="md-overlay" for="__drawer"></label> | |||||
<div data-md-component="skip"> | |||||
<a href="#le01-liberated-entertainment-center" class="md-skip"> | |||||
Skip to content | |||||
</a> | |||||
</div> | |||||
<div data-md-component="announce"> | |||||
</div> | |||||
<header class="md-header" data-md-component="header"> | |||||
<nav class="md-header-nav md-grid" aria-label="Header"> | |||||
<a href=".." title="LibreTechShop - Documentation" class="md-header-nav__button md-logo" aria-label="LibreTechShop - Documentation"> | |||||
<img src="../images/lts-icon.png" alt="logo"> | |||||
</a> | |||||
<label class="md-header-nav__button md-icon" for="__drawer"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg> | |||||
</label> | |||||
<div class="md-header-nav__title" data-md-component="header-title"> | |||||
<div class="md-header-nav__ellipsis"> | |||||
<div class="md-header-nav__topic"> | |||||
<span class="md-ellipsis"> | |||||
LibreTechShop - Documentation | |||||
</span> | |||||
</div> | |||||
<div class="md-header-nav__topic"> | |||||
<span class="md-ellipsis"> | |||||
LE01 | |||||
</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<label class="md-header-nav__button md-icon" for="__search"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> | |||||
</label> | |||||
<div class="md-search" data-md-component="search" role="dialog"> | |||||
<label class="md-search__overlay" for="__search"></label> | |||||
<div class="md-search__inner" role="search"> | |||||
<form class="md-search__form" name="search"> | |||||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required> | |||||
<label class="md-search__icon md-icon" for="__search"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> | |||||
</label> | |||||
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg> | |||||
</button> | |||||
</form> | |||||
<div class="md-search__output"> | |||||
<div class="md-search__scrollwrap" data-md-scrollfix> | |||||
<div class="md-search-result" data-md-component="search-result"> | |||||
<div class="md-search-result__meta"> | |||||
Initializing search | |||||
</div> | |||||
<ol class="md-search-result__list"></ol> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</nav> | |||||
</header> | |||||
<div class="md-container" data-md-component="container"> | |||||
<main class="md-main" data-md-component="main"> | |||||
<div class="md-main__inner md-grid"> | |||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation" > | |||||
<div class="md-sidebar__scrollwrap"> | |||||
<div class="md-sidebar__inner"> | |||||
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> | |||||
<label class="md-nav__title" for="__drawer"> | |||||
<a href=".." title="LibreTechShop - Documentation" class="md-nav__button md-logo" aria-label="LibreTechShop - Documentation"> | |||||
<img src="../images/lts-icon.png" alt="logo"> | |||||
</a> | |||||
LibreTechShop - Documentation | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href=".." class="md-nav__link"> | |||||
Home | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item md-nav__item--nested"> | |||||
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" > | |||||
<label class="md-nav__link" for="nav-2"> | |||||
LC230 | |||||
<span class="md-nav__icon md-icon"></span> | |||||
</label> | |||||
<nav class="md-nav" aria-label="LC230" data-md-level="1"> | |||||
<label class="md-nav__title" for="nav-2"> | |||||
<span class="md-nav__icon md-icon"></span> | |||||
LC230 | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href="../lc230/" class="md-nav__link"> | |||||
(LC230) Overview | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="../lc230/user-guide/" class="md-nav__link"> | |||||
(LC230) User Guide | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="../lc230/troubleshooting/" class="md-nav__link"> | |||||
(LC230) Troubleshooting | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</li> | |||||
<li class="md-nav__item md-nav__item--active"> | |||||
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> | |||||
<a href="./" class="md-nav__link md-nav__link--active"> | |||||
LE01 | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="../ledc/" class="md-nav__link"> | |||||
LEDC | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc" > | |||||
<div class="md-sidebar__scrollwrap"> | |||||
<div class="md-sidebar__inner"> | |||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents"> | |||||
</nav> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="md-content"> | |||||
<article class="md-content__inner md-typeset"> | |||||
<h1 id="le01-liberated-entertainment-center">LE01 - Liberated Entertainment Center<a class="headerlink" href="#le01-liberated-entertainment-center" title="Permanent link">¶</a></h1> | |||||
<figure> | |||||
<img src="/images/libreelec.png" width="420" align="left" /> | |||||
<figcaption>Powered by LibreELEC</figcaption> | |||||
</figure> | |||||
<h1 id="documentation-coming-soon">Documentation coming soon...<a class="headerlink" href="#documentation-coming-soon" title="Permanent link">¶</a></h1> | |||||
</article> | |||||
</div> | |||||
</div> | |||||
</main> | |||||
<footer class="md-footer"> | |||||
<div class="md-footer-nav"> | |||||
<nav class="md-footer-nav__inner md-grid" aria-label="Footer"> | |||||
<a href="../lc230/troubleshooting/" class="md-footer-nav__link md-footer-nav__link--prev" rel="prev"> | |||||
<div class="md-footer-nav__button md-icon"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> | |||||
</div> | |||||
<div class="md-footer-nav__title"> | |||||
<div class="md-ellipsis"> | |||||
<span class="md-footer-nav__direction"> | |||||
Previous | |||||
</span> | |||||
(LC230) Troubleshooting | |||||
</div> | |||||
</div> | |||||
</a> | |||||
<a href="../ledc/" class="md-footer-nav__link md-footer-nav__link--next" rel="next"> | |||||
<div class="md-footer-nav__title"> | |||||
<div class="md-ellipsis"> | |||||
<span class="md-footer-nav__direction"> | |||||
Next | |||||
</span> | |||||
LEDC | |||||
</div> | |||||
</div> | |||||
<div class="md-footer-nav__button md-icon"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg> | |||||
</div> | |||||
</a> | |||||
</nav> | |||||
</div> | |||||
<div class="md-footer-meta md-typeset"> | |||||
<div class="md-footer-meta__inner md-grid"> | |||||
<div class="md-footer-copyright"> | |||||
<div class="md-footer-copyright__highlight"> | |||||
Copyright © Mostly Harmless | |||||
</div> | |||||
Made with | |||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> | |||||
Material for MkDocs | |||||
</a> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</footer> | |||||
</div> | |||||
<script src="../assets/javascripts/vendor.93c04032.min.js"></script> | |||||
<script src="../assets/javascripts/bundle.83e5331e.min.js"></script><script id="__lang" type="application/json">{"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}</script> | |||||
<script> | |||||
app = initialize({ | |||||
base: "..", | |||||
features: [], | |||||
search: Object.assign({ | |||||
worker: "../assets/javascripts/worker/search.8c7e0a7e.min.js" | |||||
}, typeof search !== "undefined" && search) | |||||
}) | |||||
</script> | |||||
</body> | |||||
</html> |
@ -0,0 +1,391 @@ | |||||
<!doctype html> | |||||
<html lang="en" class="no-js"> | |||||
<head> | |||||
<meta charset="utf-8"> | |||||
<meta name="viewport" content="width=device-width,initial-scale=1"> | |||||
<meta name="description" content="Accessible & Free Documentation for Libre Products"> | |||||
<meta name="author" content="Abhas Abhinav"> | |||||
<link rel="shortcut icon" href="../images/lts-icon.png"> | |||||
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.2.4"> | |||||
<title>LEDC - LibreTechShop - Documentation</title> | |||||
<link rel="stylesheet" href="../assets/stylesheets/main.15aa0b43.min.css"> | |||||
<link rel="stylesheet" href="../assets/stylesheets/palette.75751829.min.css"> | |||||
<meta name="theme-color" content="#ffffff"> | |||||
<link rel="stylesheet" href="../css/extra.css"> | |||||
</head> | |||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" data-md-color-accent="pink"> | |||||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> | |||||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> | |||||
<label class="md-overlay" for="__drawer"></label> | |||||
<div data-md-component="skip"> | |||||
<a href="#ledc-led-lighting-controller" class="md-skip"> | |||||
Skip to content | |||||
</a> | |||||
</div> | |||||
<div data-md-component="announce"> | |||||
</div> | |||||
<header class="md-header" data-md-component="header"> | |||||
<nav class="md-header-nav md-grid" aria-label="Header"> | |||||
<a href=".." title="LibreTechShop - Documentation" class="md-header-nav__button md-logo" aria-label="LibreTechShop - Documentation"> | |||||
<img src="../images/lts-icon.png" alt="logo"> | |||||
</a> | |||||
<label class="md-header-nav__button md-icon" for="__drawer"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg> | |||||
</label> | |||||
<div class="md-header-nav__title" data-md-component="header-title"> | |||||
<div class="md-header-nav__ellipsis"> | |||||
<div class="md-header-nav__topic"> | |||||
<span class="md-ellipsis"> | |||||
LibreTechShop - Documentation | |||||
</span> | |||||
</div> | |||||
<div class="md-header-nav__topic"> | |||||
<span class="md-ellipsis"> | |||||
LEDC | |||||
</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<label class="md-header-nav__button md-icon" for="__search"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> | |||||
</label> | |||||
<div class="md-search" data-md-component="search" role="dialog"> | |||||
<label class="md-search__overlay" for="__search"></label> | |||||
<div class="md-search__inner" role="search"> | |||||
<form class="md-search__form" name="search"> | |||||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required> | |||||
<label class="md-search__icon md-icon" for="__search"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> | |||||
</label> | |||||
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg> | |||||
</button> | |||||
</form> | |||||
<div class="md-search__output"> | |||||
<div class="md-search__scrollwrap" data-md-scrollfix> | |||||
<div class="md-search-result" data-md-component="search-result"> | |||||
<div class="md-search-result__meta"> | |||||
Initializing search | |||||
</div> | |||||
<ol class="md-search-result__list"></ol> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</nav> | |||||
</header> | |||||
<div class="md-container" data-md-component="container"> | |||||
<main class="md-main" data-md-component="main"> | |||||
<div class="md-main__inner md-grid"> | |||||
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation" > | |||||
<div class="md-sidebar__scrollwrap"> | |||||
<div class="md-sidebar__inner"> | |||||
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> | |||||
<label class="md-nav__title" for="__drawer"> | |||||
<a href=".." title="LibreTechShop - Documentation" class="md-nav__button md-logo" aria-label="LibreTechShop - Documentation"> | |||||
<img src="../images/lts-icon.png" alt="logo"> | |||||
</a> | |||||
LibreTechShop - Documentation | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href=".." class="md-nav__link"> | |||||
Home | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item md-nav__item--nested"> | |||||
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" > | |||||
<label class="md-nav__link" for="nav-2"> | |||||
LC230 | |||||
<span class="md-nav__icon md-icon"></span> | |||||
</label> | |||||
<nav class="md-nav" aria-label="LC230" data-md-level="1"> | |||||
<label class="md-nav__title" for="nav-2"> | |||||
<span class="md-nav__icon md-icon"></span> | |||||
LC230 | |||||
</label> | |||||
<ul class="md-nav__list" data-md-scrollfix> | |||||
<li class="md-nav__item"> | |||||
<a href="../lc230/" class="md-nav__link"> | |||||
(LC230) Overview | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="../lc230/user-guide/" class="md-nav__link"> | |||||
(LC230) User Guide | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="../lc230/troubleshooting/" class="md-nav__link"> | |||||
(LC230) Troubleshooting | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</li> | |||||
<li class="md-nav__item"> | |||||
<a href="../le01/" class="md-nav__link"> | |||||
LE01 | |||||
</a> | |||||
</li> | |||||
<li class="md-nav__item md-nav__item--active"> | |||||
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> | |||||
<a href="./" class="md-nav__link md-nav__link--active"> | |||||
LEDC | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</nav> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc" > | |||||
<div class="md-sidebar__scrollwrap"> | |||||
<div class="md-sidebar__inner"> | |||||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents"> | |||||
</nav> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="md-content"> | |||||
<article class="md-content__inner md-typeset"> | |||||
<h1 id="ledc-led-lighting-controller">LEDC - LED Lighting Controller<a class="headerlink" href="#ledc-led-lighting-controller" title="Permanent link">¶</a></h1> | |||||
<figure> | |||||
<img src="/images/both-rgb-controller.jpg" width="420" align="left" /> | |||||
<figcaption>For RGB LED Strips</figcaption> | |||||
</figure> | |||||
<h1 id="documentation-coming-soon">Documentation coming soon...<a class="headerlink" href="#documentation-coming-soon" title="Permanent link">¶</a></h1> | |||||
</article> | |||||
</div> | |||||
</div> | |||||
</main> | |||||
<footer class="md-footer"> | |||||
<div class="md-footer-nav"> | |||||
<nav class="md-footer-nav__inner md-grid" aria-label="Footer"> | |||||
<a href="../le01/" class="md-footer-nav__link md-footer-nav__link--prev" rel="prev"> | |||||
<div class="md-footer-nav__button md-icon"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> | |||||
</div> | |||||
<div class="md-footer-nav__title"> | |||||
<div class="md-ellipsis"> | |||||
<span class="md-footer-nav__direction"> | |||||
Previous | |||||
</span> | |||||
LE01 | |||||
</div> | |||||
</div> | |||||
</a> | |||||
</nav> | |||||
</div> | |||||
<div class="md-footer-meta md-typeset"> | |||||
<div class="md-footer-meta__inner md-grid"> | |||||
<div class="md-footer-copyright"> | |||||
<div class="md-footer-copyright__highlight"> | |||||
Copyright © Mostly Harmless | |||||
</div> | |||||
Made with | |||||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> | |||||
Material for MkDocs | |||||
</a> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</footer> | |||||
</div> | |||||
<script src="../assets/javascripts/vendor.93c04032.min.js"></script> | |||||
<script src="../assets/javascripts/bundle.83e5331e.min.js"></script><script id="__lang" type="application/json">{"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}</script> | |||||
<script> | |||||
app = initialize({ | |||||
base: "..", | |||||
features: [], | |||||
search: Object.assign({ | |||||
worker: "../assets/javascripts/worker/search.8c7e0a7e.min.js" | |||||
}, typeof search !== "undefined" && search) | |||||
}) | |||||
</script> | |||||
</body> | |||||
</html> |