# Rust interface to the Linux Framebuffer API
[](https://crates.io/crates/linuxfb/)

[](https://gitlab.com/nilclass/rust-linuxfb/pipelines)
Provides a safe, rusty wrapper around the Linux Framebuffer API (`linux/fb.h`).
[Online Documentation](https://docs.rs/linuxfb/latest)
## Features & Scope
* Discover & open framebuffer devices
* Read useful information from the device, such as:
* Size of the display, in pixels and millimeters
* Pixel-level layout (color channels, bytes per pixel)
* Virtual display size, to use for panning, double-buffering, etc.
* Modify virtual size, panning offset and bytes-per-pixel (for some drivers this allows switching between 32-bit and 16-bit mode)
* Map the device into memory (provides you with a `&mut [u8]` slice to write to)
* Optional wrapper providing a double-buffered surface, that can be "flipped"
This package does **NOT** deal with:
* Drawing of any kind
* Color representation and conversion
* Terminal mode setting. If a tty is bound to your framebuffer, you need to set it to graphics mode, to prevent a cursor and other output to be written on top of your image. The usual way to do this is with `ioctl(..., KDSETMODE, KD_GRAPHICS)` on the current TTY device. Doing this is out of scope for this crate, since it's not strictly part of the framebuffer API.
## Getting started
First of all, make sure you have access to your framebuffer device.
You can usually do that by running as root (definitely *not* recommended), or by adding yourself to the `video` group.
There are two examples provided in the documentation:
1. Accessing, configuring and using the framebuffer in the [`linuxfb::Framebuffer documentation`](https://docs.rs/linuxfb/latest/linuxfb/struct.Framebuffer.html)
2. Using the optional double-buffering implementation in the [`linuxfb::double::Buffer documentation`](https://docs.rs/linuxfb/latest/linuxfb/double/struct.Buffer.html)
## Contributing
- The upstream source can be found [here](https://gitlab.com/nilclass/rust-linuxfb)
- Pull requests are generally accepted, if they fit the scope of the package