libcec is the software that powers the Pulse-Eight USB-CEC Adapter and allows it to communicate with your TV over HDMI. This article covers how to build and install libcec on Linux (Debian/Ubuntu). For Raspberry Pi, see: CEC Adapter — Using libcec with a Raspberry Pi
Prerequisites
libcec requires the following to function correctly:
- p8-platform 2.0 or later — github.com/Pulse-Eight/platform
- udev v151 or later
- cdc-acm kernel support — either compiled into the kernel or available as a loadable module
To compile libcec you will also need:
- cmake 2.6 or later
- A C++11 compatible compiler (GCC or Clang)
- Recommended: pkg-config, udev development headers v151 or later, and X RandR development headers — without these, the adapter may not be fully auto-detected
Installing on Debian or Ubuntu
On a new Debian or Ubuntu installation, run the following commands in order:
sudo apt-get update sudo apt-get install cmake libudev-dev libxrandr-dev python3-dev swig git clone https://github.com/Pulse-Eight/libcec.git mkdir libcec/build cd libcec/build cmake .. make -j4 sudo make install sudo ldconfig
Once complete, libcec is installed and the cec-client command-line tool is available.
Testing the Installation
With the USB-CEC Adapter connected and your TV powered on, run:
cec-client -l
This lists detected CEC adapters. You should see the Pulse-Eight adapter listed. To scan the CEC network and see all connected devices:
echo "scan" | cec-client -s -d 1
Common Commands
Turn TV on:
echo "on 0" | cec-client -s -d 1
Turn TV off / standby:
echo "standby 0" | cec-client -s -d 1
Monitor all CEC traffic:
cec-client -m
Press Ctrl+C to stop monitoring. See: CEC Adapter — Monitoring Mode
Building for Other Hardware Platforms
libcec supports additional hardware platforms beyond the USB-CEC Adapter. Pass the relevant argument to cmake when compiling:
| Platform | cmake argument |
|---|---|
| Exynos SoC | -DHAVE_EXYNOS_API=1 |
| Amlogic AOCEC | -DHAVE_AOCEC_API=1 |
| NXP TDA995x | -DHAVE_TDA995X_API=1 |
| Linux CEC Framework (kernel 4.10+) | -DHAVE_LINUX_API=1 |
For example, to build with Linux CEC Framework support:
cmake -DHAVE_LINUX_API=1 ..
Using systemd
Example systemd unit files for common libcec use cases are included in the libcec source repository in the systemd/ folder. These can be used to run cec-client as a background service that starts automatically on boot.
Debian/Ubuntu Package (.deb)
Instructions for building a .deb package for Debian or Ubuntu are available in the libcec repository at docs/README.debian.md. This is useful if you want to deploy libcec across multiple machines.
libcec source and documentation: github.com/Pulse-Eight/libcec
Email: cs@pulse-eight.com | Submit a support ticket