On USB projectors, linux and libam7xxx

I was looking into compact/mini/pico/handheld projectors, and I obviously wanted something I could use under GNU/linux, there were basically two choices:

  1. Pick up a projector with VGA/HDMI: Operating System independent.
  2. Pick up a USB projector: shipped only with drivers for MS Windows (and sometimes for MacOSX too).

Since the first choice was more expensive and I verified that writing a driver for the second case wasn't too hard, I picked up an Acer C110, I paid it about 160 €, but you can find it even cheaper somewhere else, grr.


The C110 is based on an Actions Micro AM7212P IC and uses USB bulk transfers with a simple packet based protocol on top to exchange data and commands to and from a host system and the AM7XXX chip.

Other projectors using the same protocol are:

These projectors use the USB Vendor and Product IDs 1de1:1101 in mass storage mode and 1de1:c101 in display mode.

Some DPFs too (from Hannspree for instance) are known to use these chips but I don't know yet if they can be put in USB display mode.

I will refer to these devices as either AM7X or AM7XXX devices.

Open Source driver for AM7XXX devices

Reto Schneider and I are reverse engineering the USB protocol used by these devices, using USB dumps and disassembling the Windows device driver, and a basic but already usable library to communicate with those AM7x based projectors can be found in libam7xxx. Reto was the first to start working on that, in the form of acerc11xdrv.

So you can now get these projectors to work wherever libusb-1.0 works, that means you can use them with your phone if it can run GNU/Linux for instance, or even Android/Linux but I don't have an Android device to verify that.

For now all the communication about the development is happening on the #am7xxx IRC Channel on the Freenode Network, come find us, and let us know if you want to help: like hosting a mailing list for us, or sponsoring some hardware (USB projectors you want to use freely or devices you want to use these projectors with).

Side note: the user manuals of these devices sometimes refer to the functionality of displaying images over USB as Display over USB (or DoUSB), this definition is used on a lot of projectors but I don't know if it refers always to the same protocol/mechanism to send images over USB.

Linux running ON other projectors

Incidentally, when I was doing my pre-purchase market research, I ran into several projectors which —unsurprisingly— are running a Linux system themselves (linux kernel, busybox, etc.), here is a summary of what I found out:

  • Samsung SP-H03 (not based on AM7X): the firmware image can be downloaded here, and Samsung is providing the source code for the Free Software used in it, you can find it on opensource.samsung.com (AFAIR Harald Welte gave them some directions about GPL compliance, right?).

    This could be an interesting device if you want to run your own code on a projector.

  • Acer K330: based on a chip of the same am7x family as the C110.

    The firmware image is available for download and it does contain the Linux kernel and other Open Source software, but the source code is not available, neither Linux or the GPL are mentioned in the downloadable documentation; I am going to do more research on this later to see if Acer is in compliance with the GPL.

Open Projectors?

Having the ability of processing an image before projecting it —either on an external system, or on the projector itself— opens up to a lot of possibilities, and I can foresee an increase of AR applications using projectors; so, do you think there is enough interest for an Open Projectors project? A place where we can share the techniques (keystone correction, or some more sophisticate anamorphic transformations by the means of a Camera-Projector system) and the Open Source software implementing them, all in a single place.

Get in touch if you have any ideas about that.

CommentsSyndicate content

Hi, send me via email the

ao2's picture


send me via email the outptut of the command lsusb -vvv -d xxxx:yyyy where xxxx is the USB Vendor ID of your device and yyyy is the Product ID.

By looking at the USB descriptor there is a chance of knowing if your projector can be supported by libam7xxx.

You can also get in touch by joining the #am7xxx IRC channel on FreeNode.net.

Ciao, Antonio

Hi Antonio, I just bought a

Daniel's picture

Hi Antonio,

I just bought a PicoPix 3614tv that's comes with drivers and wifi connection app for windows, but I'm actually using linux (debian 8) and the system does not recognize the projector connected neither through HDMI or USB. Yes, I already installed the libam7xxx-dev, what you advice ?


Hi Daniel, libam7xxx is about

ao2's picture

Hi Daniel, libam7xxx is about streaming frames over USB directly, you have to check if your devices allows that.

Does the windows driver allow to show your desktop screen when the device is connected via USB? If it does, then contact me via email and we will try to find out if the protocol used is the same supported by libam7xxx.

About wifi streaming: again you have to figure out what protocol is used (you can use wireshark for that) and see if there is an implementation for linux. I don't think I have time to follow you with that.

About HDMI output, I think this should work out of the box, just see if you linux box recognizes the projector as a second screen, maybe connect it and power it up before booting linux.

Ciao ciao, Antonio

Any news for Acer c120

Ramachandran G's picture

Any news for Acer c120 Pico

Hi Ramachandran, the Acer

ao2's picture

Hi Ramachandran,

the Acer C120 is not an am7xxx device, take a look at https://ao2.it/en/news/2015/07/08/linux-kms-driver-acer-c120

BTW the page above is also the first result of searching "acer c120 linux" in google.

Ciao ciao, Antonio

Ciao Antonio, I have

Atanu's picture

Ciao Antonio,

I have installed libam7xxx-dev from Ubuntu repository on Ubuntu 16.04 and my picopix 2055 works perfectly. Thanks a lot for the driver. Although I wanted to know if I can use this USB projector in "extension" mode and not just "mirror" like any other VGA/HDMI projector ?


Hi Atanu, am7xxx-play just

ao2's picture

Hi Atanu,

am7xxx-play just captures a screen, so if you want an extension mode you have to find a way to create that extra screen.

I did some experiments using xserver-xorg-video-dummy to create the extra screen, plus x2x to connect it to the main screen, but I never published it.

Contact me via e-mail if you want to try out this method.

Ciao, Antonio

Hi, Awesome project, works

Ben's picture


Awesome project, works great with my 2 unbranded mini projectors (C112 China copy), even simultaneously what the original driver wasn't capable of :D

Is it somehow possible to redirect the audio stream to the default audio device while using am7xxx-play to stream the video, or would I have to create an own tool using the lib? Maybe some UNIX or ffmpeg trick? All I could come up with was am7xxx-play -i video.avi & vlc --vout none video.avi which obviously resulted in being async..


Hi Ben, I am glad libam7xxx

ao2's picture

Hi Ben,

I am glad libam7xxx is useful to you. If you can, please send me an email with more details about these unbranded projectors.

About having the audio in sync, the best solution is to use GStreamer and have the projector as the "video sink" using gst-am7xxxsink. Let me know how that works out for you.

If there is interest I can spend some time to have gst-am7xxxsink packaged for Debian too.

Ciao, Antonio

Post new comment

The content of this field is kept private and will not be shown publicly. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options

This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Enter the code without spaces.