Git Product home page Git Product logo

papertty's People

Contributors

badrihippo avatar burlapsax avatar chi-lambda avatar colin-nolan avatar edwardbetts avatar fimad avatar fpammer avatar gdkrmr avatar joukos avatar mcarr823 avatar mil avatar sonic74 avatar thegreydiamond avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

papertty's Issues

Feature(?) Draw images when using the terminal

Basic idea: With a regular TFT screen, you can be using the terminal, and then use fbi to view images on the TFT. If you quit, then it sends you back to the terminal.

I'm not sure if there's a way to do that with the existing codebase. I didn't find anything, and it appears that trying to write to the SPI/launch a second papertty process to draw an image just fails because the device is busy.

One imaginary approach is that the papertty process has some way of providing information, whether that's using inotify, or sending information via a port, or ???

I'm not sure exactly what process things currently use, but it would be really neat if that were a possibility.

Font size ignored for terminal

I'm running the Waveshare 4.2 display and the epd4in2 display driver. stdin is not responsive, but the terminal option works. However, any setting for the --font argument does nothing. I'm running on a Raspberry Pi 3, Raspbian, and running directly without virtualenv. What other info do you need for a diagnosis?

Create PyPi package

It would be very nice if it was possible to simplify the installation of PaperTTY to just pip install papertty. Any help with achieving this is appreciated.

Flashing?

Hi there! General question:

Does the entire screen flash whenever something changes?

Reimplement and refactor the display driver code

The current drivers are essentially exactly the same as the reference drivers - they leave a lot to be desired:

  • the frame buffer handling / drawing / bit fiddling is done in an unnecessarily convoluted fashion - they could be made much simpler and more readable
  • the repetition in the display commands etc. is quite dull and redundant - many parts of the drivers could be reduced to more readable oneliners
  • there are confusing comments, non-pythonic code, varying naming schemes and code that makes one wonder if it works correctly or not
  • etc.

Having more knowledge of the particulars of these displays (and the actual hardware available for testing!) should yield a rewrite that is much simpler and nice to read.

Pull requests / issues are very welcome.

SENSATIONAL WORK

My Pi Zero W with the same epaper display was also recently featured by hackday:
https://www.youtube.com/watch?v=1h0B2MWSVmQ
I've put the files on thingiverse.

I had the same idea as you, I wanted to display basic info about the system's state on the display, like wifi ssid / ip address and interact with it. I was really dreaming of having a terminal on it.
You made it happen! Can't wait to try it out at home!

BTW, the bigger Waveshare displays don't have partial refresh and it's really complicated to make them fast enough. There's a bigger display incl partial refresh from papirus:
https://uk.pi-supply.com/products/papirus-epaper-eink-screen-hat-for-raspberry-pi
I'm planning to design a bigger case for the Pi3 and that display, would love to see your terminal on that one, too.

Would be great to stay in touch!

Partial window support for 7.5inv2

Last month, I managed to get a partial window working on my 7.5" screen (the GDEW075T7) but haven't found the time to iron out everything and clean up the code. I'll get to this by and by, but instead of sitting on it, I decided to paste the code out here in case someone else wants to use it without waiting.

7in5v2partial.snippet.py.txt

This is built upon my previous pull request at #35, as well as the work done later by @colin-nolan in #51. I managed to get a partial window working (only that part of the screen gets refreshed), but not a partial refresh (simple change of pixels with no blink, blink each time). To get it working, you need to

  1. append the code to drivers/drivers_partial.py
  2. add drivers_partial.EPD7in5v2partial to driverlist (under the get_drivers function in papertty.py)

Like I said the code is very messy, and I'll come clean it up at some point. Just wanted to get the code out in case it helps someone in the meantime.

CPU usage

What is the expected CPU load on a Pi Zero? I'm seeing constant 50-70% load on my Zero just sitting at a terminal prompt and I'm curious if that is expected for this hardware or something is wonky.

Refactor: OO, device support

For future reference:

  • Refactor code to have a class for the display and make the code overall more maintainable
  • Add support for all the displays, relevant repo: https://github.com/soonuse/epd-library-python
    • Code appears to be MIT licensed?
  • If the device doesn't support partial refresh, allow using it with full refreshes
  • Make it easy to replace the drawing method in order to support other types of displays

Scrub does not accept size of 32

Scrub states that you can specify a size between 8 and 32. It won't accept 32 but then tells you it must be 8-32.

pi@raspberrypi:~/PaperTTY $ sudo ./papertty.py --driver epd2in13 scrub --size 32 Invalid stripe size, must be 8-32

Beyond raspberry pi?

I'm guessing this is only feasible on the raspberry pi because Waveshare sell with hats - but is there any info/discussions/plans for using this on a generic box?

Scrub command error with EPD 2.7" (monochrome)

Hi, thank you very much for the code, this is really great work.
It's my first post in Github in my life, but it seems I've found error, so just made account of Github.
I'm not good at programming, so posting this with hoping this is right manner...

I'm using EPD 2.7" (monochrome) of waveshare,
and tried command
sudo ./papertty.py --driver epd2in7 scrub

but got error (text file attached) hope this can be useful.
error.txt

by the way I have EPD1.54" also, and command worked for this display.

Mirror function for VNC

I have a 10.3" 1872x1404 display. I'm able to get VNC working on it great, but I can't get VNC to mirror the image, so all the text is backwards.

Why is CS pin controlled through GPIO and not with SPI?

I would like to use a second device on the SPI, which requires to let control of CS pin to spi-dev. Otherwise the code simply sets CS pin active while driver for second device currently has CS pin for second device active and transfers data. IT8951 would then receive data meant for second device.

Implement pseudo-terminal

Instead of reading /dev/vcsa*, allocate a pseudo TTY.

A big problem with the VT buffer is that the original unicode value is lost.

Having an option to use a pty should:

  • make the encoding issues easier to handle
  • enables the use of more symbols, block characters, languages etc.
  • allow to have an arbitrarily sized terminal, instead of ioctl complaining - currently some of the display/font combinations are such that not all of the panel can be utilized optimally

waveshare 2.13b (blk/wht/red) displays nothing but mostly red garbage.

Hi there!

firstly thanks for all the awesome work on this. I'm super excited to play with it.

It seems the 2.13b is different enough that the standardization of the driver seems to have sorta rendered it unfunctional.

I'll play around with it and see if I can't get something working, but figured I'd open an issue first before digging in.

ImportError: libtiff.so.5: cannot open shared object file: No such file or directory

I followed the install instructions to the letter on a fresh install, but on the first run of I got the following error:

(papertty) rroels@piz:~/PaperTTY $ sudo ~/.virtualenvs/papertty/bin/python3 ./papertty.py list
Traceback (most recent call last):
File "./papertty.py", line 14, in
import drivers.drivers_base as drivers_base
File "/home/rroels/PaperTTY/drivers/drivers_base.py", line 18, in
from PIL import Image
File "/home/rroels/.virtualenvs/papertty/lib/python3.7/site-packages/PIL/Image.py", line 93, in >
from . import _imaging as core
ImportError: libtiff.so.5: cannot open shared object file: No such file or directory

Luckily the solution is trivial:

sudo apt install libtiff5

Maybe this should be added to the install instructions?

Safety and image clarity

In order to prevent any potential damage for long running applications and keep the image clean, a couple of things ought to be done:

  • Set the panel to deep sleep after a refresh
  • Apply a full-refresh update every now and then for terminal mode (vnc does this already)
    • Also allow to manually initiate (such as scrub currently - but it's not as useful)

Rationale for deep sleep is an entry in the FAQ tab of Waveshare wiki page for 2.13" (not sure when it was added but I don't remember seeing this particular mention earlier):

Question:
Why my e-paper has ghosting problem after working for some days
Answer:
Please set the e-paper to sleep mode or disconnect it if you needn't refresh the e-paper but need to power on your development board or Raspberry Pi for long time.Otherwise, the voltage of panel keeps high and it will damage the panel

Rationale for full refreshes every now and then is also on the same FAQ page:

Note that you cannot use Partial refresh all the time, you should full refresh e-paper regularly, otherwise, ghost problem will get worse even damage.

Also regarding the three-color variants, there's yet another note (though its exact meaning is a bit vague to me):

You need to update the content of three-color e-Paper at least one time every 24h to avoid from burn-in problem.

The last thing I want is someone's display suffering damage from running PaperTTY too long (which might be a very typical use case), so I think these should be addressed.

Sudo with papertty?

EDIT: sudo is working now, not sure what I did

I am stuck. I try to use sudo and get an error...

sudo papertty --driver EPD4IN2 terminal
sudo: papertty: command not found

...and without....

papertty --driver EPD4IN2 terminal
Loading PIL font /home/pi/.local/lib/python3.7/site-packages/papertty/resources/tom-thumb.pil. Font size is ignored.
No read access to /dev/vcsa1 - maybe run with sudo?

.....any suggestions?

Issue running terminal

Sorry if this is incredibly basic, but I've installed papertty on my raspberry pi 3 with a 9.7" waveshare epaper screen and it's been running quite well. I've gotten the VNC, image, etc... features running without issue. However, when trying to run terminal, it's outputting absolutely tiny font and in the wrong orientation (see this image: https://postimg.cc/QBtb0sCQ). I'm running Debian 10 (Buster) which may be part of the reason for the error. Per the dev updates on the front page, it looks like unicode support was incorporated for this particular OS. However, when I run papertty terminal it provides an error message about unicode being unsupported and defaulting to 8 bit, which may be part of the issue.

In addition to the tiny sideways text, it appears that the terminal on my papertty screen is not receiving input commands, as nothing I type is showing up.

Forgive me if this issue is extremely pedestrian. If it's been addressed elsewhere, just let me know. I'm not very familiar with programming for drivers, but I have some experience with python, so if this seems like an error of some kind that you could use help fixing, I wouldn't mind helping out if you could point me to where I can learn some about how all this works.

Thanks and this has been a wonderful project to stumble on to! I was worried I'd have to learn how to program an IT8951 driver for this bad boy myself, which probably would have required a great deal of time.

Burn in?

I am developing the partial refresh 4.2 inch driver and during development I always use htop for testing and sometimes I just leave the display running for an hour or two. Now I can see the htop layout every time my screen does a refresh. After doing constant refreshes for 5 minutes, the `htop screen has faded a bit on displayed images, but is still very much noticeable during refreshes.

I guess terminals are the worst case scenario for burn ins, because they have characters always at the same positions.

Anyone else with this problem?
Is this going to be permanent?
Do we need a random frame buffer for refreshing or random shifts (like OLED displays) to avoid this?

4.2 inch display doesn't work

I have a Pi 3 B+ system where I've been successfully using a 2.9 inch display. I ordered a monochrome 4.2 inch display, which arrived today. I connected it up and changed it from epd2in9 to epd4in2 in start.sh so I would get console on it on boot but nothing happened (not even the scrub).

My start.sh's command line is:

${VENV} papertty.py --driver epd4in2 terminal --font /usr/share/fonts/truetype/msttcorefonts/Andale_Mono.ttf --size 12 --scrub --autofit

I investigated by stopping the service and then trying to run a scrub by hand with:

sudo ./papertty.py --driver epd4in2 scrub

and I get the following error:

~/PaperTTY $ sudo ./papertty.py --driver epd4in2 scrubTraceback (most recent call last):
  File "./papertty.py", line 443, in <module>
    cli()
  File "/usr/lib/python3/dist-packages/click/core.py", line 716, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/core.py", line 696, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3/dist-packages/click/core.py", line 1060, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3/dist-packages/click/core.py", line 889, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3/dist-packages/click/core.py", line 534, in invoke
    return callback(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/decorators.py", line 27, in new_func
    return f(get_current_context().obj, *args, **kwargs)
  File "./papertty.py", line 310, in scrub
    ptty.driver.scrub(fillsize=size)
  File "/home/pi/PaperTTY/drivers/drivers_base.py", line 53, in scrub
    self.fill(self.black, fillsize=fillsize)
  File "/home/pi/PaperTTY/drivers/drivers_base.py", line 60, in fill
    self.draw(x, 0, image)
  File "/home/pi/PaperTTY/drivers/drivers_full.py", line 66, in draw
    self.display_frame(self.get_frame_buffer(image))
  File "/home/pi/PaperTTY/drivers/drivers_full.py", line 76, in get_frame_buffer
    ({0}x{1}).'.format(self.width, self.height))
ValueError: Image must be same dimensions as display                 (400x300).

I don't think I am doing anything obviously wrong and this worked on the 2.9 on the same Raspberry Pi.

Add documentation on pypy use

Just though I'd share my notes here on how to use pypy with papertty. I'm working on a 4in2 display with a pi zero and am trying to improve performance. Not sure yet if pypy helps, but here's a short how-to:

sudo apt install pypy3 pypy3-devel libjpeg-dev zlib1g-dev wiringpi virtualenv
virtualenv --python=/usr/bin/pypy3 papertty_venv_pypy
. papertty_venv_pypy/bin/activate
pip3 install papertty

For fonts:
sudo apt install ttf-mscorefonts-installer
and to see what's provided:
ls /usr/share/fonts/truetype/msttcorefonts

And in my start.sh, I use:

. /home/pi/papertty_venv_pypy/bin/activate
papertty --driver EPD4in2 terminal --size 11 --autofit --font /usr/share/fonts/truetype/msttcorefonts/cour.ttf --portrait

Also, thanks everyone who has contributed to this tool. This is super cool stuff. :D

trouble running papertty.py

File "./papertty.py", line 716, in
cli()
File "/usr/lib/python3/dist-packages/click/core.py", line 764, in call
return self.main(*args, **kwargs)
File "/usr/lib/python3/dist-packages/click/core.py", line 717, in main
rv = self.invoke(ctx)
File "/usr/lib/python3/dist-packages/click/core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/lib/python3/dist-packages/click/core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/lib/python3/dist-packages/click/core.py", line 555, in invoke
return callback(*args, **kwargs)
File "/usr/lib/python3/dist-packages/click/decorators.py", line 27, in new_func
return f(get_current_context().obj, *args, **kwargs)
File "./papertty.py", line 502, in vnc
ptty = settings.get_init_tty()
File "./papertty.py", line 394, in get_init_tty
tty.init_display()
File "./papertty.py", line 246, in init_display
self.driver.init(partial=self.partial)
File "/home/pi/PaperTTY/drivers/drivers_partial.py", line 69, in init
if self.epd_init() != 0:
File "/home/pi/PaperTTY/drivers/drivers_base.py", line 184, in epd_init
self.SPI = spidev.SpiDev(0, 0)
FileNotFoundError: [Errno 2] No such file or directory

Support waveshare 9.7in display

Hi,

I acquired an 9.7 inch e-ink display which, according to the waveshare, supports partial refresh. I've used their example code for full refreshes, but did not yet find out how to do a partial refresh - the displays refreshes partially, but doesn't display new text in the refreshed area - yet ;)

I'd be very interesting in working on PaperTTY support for this display, but I am new to e-ink displays in general and the 9.7in model seems to work quite differently compared to the smaller models. It uses a IT8951 controller. As far as I understand, I'd need the LUT values for PaperTTY? They seem to be stored in the hat, at least I haven't found them in the demo code yet. And information on the public internet seems sparse.

Anyone else interested in this?

More Infos on the official Wiki page: https://www.waveshare.com/wiki/9.7inch_e-Paper_HAT, the chinese version has a bit more info and code: http://www.waveshare.net/wiki/9.7inch_e-Paper_HAT

Replace PIL with Pillow

This issue is for future reference.

@cclauss outlined some steps to replace the imaging library with Pillow in #2 (comment).

Currently there's some wrinkles in going for it because the Waveshare library uses PIL. There are forks around already.

Tested on Waveshare 2.7 inch epaper Pi Hat but issue with external Keyboard Input

Just tested on the Waveshare 2.7 Inch epaper Pi Hat (https://www.waveshare.com/wiki/2.7inch_e-Paper_HAT) and can confirm everything installed and that the terminal commands work when using ssh. The script to run at boot also works however I'm not able to use an external keyboard (screen remains static in the login prompt and all key presses are not reflected or refreshing). Was there anything that you e configured to allow usb keyboard inputs to show up on the mirrored terminal?

Write tests

Now that there's more than enough features, should also add proper tests.

Trouble getting papertty to run

I have the 4.2 Waveshare display and I can run their python demo code fine. For papertty I have installed in a virtualenv as indicated in the readme. When I try the following command (from within the virtualenv)
papertty --driver EPD4in2 image --image test-img.bmp
, both as root or regular user, I get the following error:

Traceback (most recent call last):
  File "/home/pi/papertty_venv/bin/papertty", line 10, in <module>
    sys.exit(papertty.cli())
  File "/home/pi/papertty_venv/lib/python3.7/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/home/pi/papertty_venv/lib/python3.7/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/pi/papertty_venv/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/pi/papertty_venv/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/pi/papertty_venv/lib/python3.7/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/pi/papertty_venv/lib/python3.7/site-packages/click/decorators.py", line 33, in new_func
    return f(get_current_context().obj, *args, **kwargs)
  File "/home/pi/papertty_venv/lib/python3.7/site-packages/papertty/papertty.py", line 567, in image
    ptty = settings.get_init_tty()
  File "/home/pi/papertty_venv/lib/python3.7/site-packages/papertty/papertty.py", line 398, in get_init_tty
    tty = PaperTTY(**self.args)
  File "/home/pi/papertty_venv/lib/python3.7/site-packages/papertty/papertty.py", line 75, in __init__
    self.driver = get_drivers()[driver]['class']()
  File "/home/pi/papertty_venv/lib/python3.7/site-packages/papertty/drivers/drivers_4in2.py", line 72, in __init__
    super(drivers_partial.WavesharePartial, self).__init__(name='4.2"',
NameError: name 'drivers_partial' is not defined

Other attempts to run papertty produce similar errors.

Add config file

Add support for reading a configuration file to simplify usage.

ERROR: Failed building wheel for Pillow

ERROR: Failed building wheel for Pillow

plz help me to solve this....

`pi@raspberrypi:~/PaperTTY $ mkvirtualenv -p /usr/bin/python3 -r requirements.txt papertty
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/pi/.virtualenvs/papertty/bin/python3
Also creating executable in /home/pi/.virtualenvs/papertty/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting Pillow
Downloading https://files.pythonhosted.org/packages/5b/bb/cdc8086db1f15d0664dd22a62c69613cdc00f1dd430b5b19df1bea83f2a3/Pillow-6.2.1.tar.gz (37.7MB)
|████████████████████████████████| 37.7MB 3.5kB/s
Collecting RPi.GPIO
Downloading https://www.piwheels.org/simple/rpi-gpio/RPi.GPIO-0.7.0-cp35-cp35m-linux_armv6l.whl (67kB)
|████████████████████████████████| 71kB 162kB/s
Collecting spidev
Downloading https://www.piwheels.org/simple/spidev/spidev-3.4-cp35-cp35m-linux_armv6l.whl
Collecting click
Downloading https://www.piwheels.org/simple/click/Click-7.0-py2.py3-none-any.whl (81kB)
|████████████████████████████████| 81kB 128kB/s
Collecting vncdotool
Downloading https://www.piwheels.org/simple/vncdotool/vncdotool-0.13.0-py3-none-any.whl
Collecting Twisted
Downloading https://www.piwheels.org/simple/twisted/Twisted-19.10.0-cp35-cp35m-linux_armv6l.whl (3.1MB)
|████████████████████████████████| 3.1MB 72kB/s
Collecting Automat>=0.3.0
Downloading https://files.pythonhosted.org/packages/e5/11/756922e977bb296a79ccf38e8d45cafee446733157d59bcd751d3aee57f5/Automat-0.8.0-py2.py3-none-any.whl
Collecting constantly>=15.1
Downloading https://files.pythonhosted.org/packages/b9/65/48c1909d0c0aeae6c10213340ce682db01b48ea900a7d9fce7a7910ff318/constantly-15.1.0-py2.py3-none-any.whl
Collecting hyperlink>=17.1.1
Downloading https://files.pythonhosted.org/packages/7f/91/e916ca10a2de1cb7101a9b24da546fb90ee14629e23160086cf3361c4fb8/hyperlink-19.0.0-py2.py3-none-any.whl
Collecting zope.interface>=4.4.2
Downloading https://www.piwheels.org/simple/zope-interface/zope.interface-4.7.1-cp35-cp35m-linux_armv6l.whl (163kB)
|████████████████████████████████| 163kB 7.1kB/s
Collecting PyHamcrest>=1.9.0
Downloading https://www.piwheels.org/simple/pyhamcrest/PyHamcrest-1.9.0-py2.py3-none-any.whl (52kB)
|████████████████████████████████| 61kB 32kB/s
Collecting attrs>=17.4.0
Downloading https://www.piwheels.org/simple/attrs/attrs-19.3.0-py2.py3-none-any.whl
Collecting incremental>=16.10.1
Downloading https://files.pythonhosted.org/packages/f5/1d/c98a587dc06e107115cf4a58b49de20b19222c83d75335a192052af4c4b7/incremental-17.5.0-py2.py3-none-any.whl
Collecting six
Downloading https://www.piwheels.org/simple/six/six-1.13.0-py2.py3-none-any.whl
Collecting idna>=2.5
Downloading https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl (58kB)
|████████████████████████████████| 61kB 235kB/s
Requirement already satisfied: setuptools in /home/pi/.virtualenvs/papertty/lib/python3.5/site-packages (from zope.interface>=4.4.2->Twisted->vncdotool->-r requirements.txt (line 5)) (41.6.0)
Building wheels for collected packages: Pillow
Building wheel for Pillow (setup.py) ... error
ERROR: Command errored out with exit status 1:
command: /home/pi/.virtualenvs/papertty/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-cz_wrs2v/Pillow/setup.py'"'"'; file='"'"'/tmp/pip-install-cz_wrs2v/Pillow/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-c7l05ek4 --python-tag cp35
cwd: /tmp/pip-install-cz_wrs2v/Pillow/
Complete output (172 lines):
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-armv6l-3.5
creating build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageQt.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/TiffImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageDraw.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PcdImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ContainerIO.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/IptcImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/_tkinter_finder.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageOps.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PcxImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GbrImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/EpsImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GimpGradientFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/init.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FpxImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/SunImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/BufrStubImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/MspImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageShow.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ExifTags.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageChops.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/features.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PdfImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageMode.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageGrab.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/TiffTags.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImagePath.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/_binary.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/XbmImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FliImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageDraw2.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PixarImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FtexImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImagePalette.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/WalImageFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageStat.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GdImageFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PyAccess.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/CurImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/DcxImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/SgiImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/JpegImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GifImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/_util.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/MpegImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/TarIO.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PaletteFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/BdfFontFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageFilter.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GimpPaletteFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/main.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/XpmImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PalmImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PcfFontFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/WmfImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/JpegPresets.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GribStubImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/MpoImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/Hdf5StubImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageMorph.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FitsStubImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageEnhance.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/Jpeg2KImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PpmImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageColor.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageFont.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/_version.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/WebPImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/McIdasImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PdfParser.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageWin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageTransform.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PSDraw.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageTk.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/DdsImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageMath.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/MicImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/IcoImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageSequence.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/IcnsImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImtImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/Image.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageCms.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/TgaImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/XVThumbImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PngImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FontFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PsdImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/SpiderImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/BlpImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/BmpImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
running egg_info
writing top-level names to src/Pillow.egg-info/top_level.txt
writing src/Pillow.egg-info/PKG-INFO
writing dependency_links to src/Pillow.egg-info/dependency_links.txt
reading manifest file 'src/Pillow.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '.c'
warning: no files found matching '
.h'
warning: no files found matching '.sh'
warning: no previously-included files found matching '.appveyor.yml'
warning: no previously-included files found matching '.coveragerc'
warning: no previously-included files found matching '.codecov.yml'
warning: no previously-included files found matching '.editorconfig'
warning: no previously-included files found matching '.readthedocs.yml'
warning: no previously-included files found matching 'azure-pipelines.yml'
warning: no previously-included files matching '.git
' found anywhere in distribution
warning: no previously-included files matching '.pyc' found anywhere in distribution
warning: no previously-included files matching '
.so' found anywhere in distribution
no previously-included directories found matching '.azure-pipelines'
no previously-included directories found matching '.travis'
writing manifest file 'src/Pillow.egg-info/SOURCES.txt'
running build_ext

The headers or library files could not be found for jpeg,
a required dependency when compiling Pillow from source.

Please see the install instructions at:
https://pillow.readthedocs.io/en/latest/installation.html

Traceback (most recent call last):
File "/tmp/pip-install-cz_wrs2v/Pillow/setup.py", line 888, in
zip_safe=not (debug_build() or PLATFORM_MINGW),
File "/home/pi/.virtualenvs/papertty/lib/python3.5/site-packages/setuptools/init.py", line 145, in setup
return distutils.core.setup(**attrs)
File "/usr/lib/python3.5/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/lib/python3.5/distutils/dist.py", line 955, in run_commands
self.run_command(cmd)
File "/usr/lib/python3.5/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/home/pi/.virtualenvs/papertty/lib/python3.5/site-packages/wheel/bdist_wheel.py", line 192, in run
self.run_command('build')
File "/usr/lib/python3.5/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/lib/python3.5/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/usr/lib/python3.5/distutils/command/build.py", line 135, in run
self.run_command(cmd_name)
File "/usr/lib/python3.5/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/lib/python3.5/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/usr/lib/python3.5/distutils/command/build_ext.py", line 339, in run
self.build_extensions()
File "/tmp/pip-install-cz_wrs2v/Pillow/setup.py", line 687, in build_extensions
raise RequiredDependencyException(f)
main.RequiredDependencyException: jpeg

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "", line 1, in
File "/tmp/pip-install-cz_wrs2v/Pillow/setup.py", line 903, in
raise RequiredDependencyException(msg)
main.RequiredDependencyException:

The headers or library files could not be found for jpeg,
a required dependency when compiling Pillow from source.

Please see the install instructions at:
https://pillow.readthedocs.io/en/latest/installation.html


ERROR: Failed building wheel for Pillow
Running setup.py clean for Pillow
Failed to build Pillow
Installing collected packages: Pillow, RPi.GPIO, spidev, click, attrs, six, Automat, constantly, idna, hyperlink, zope.interface, PyHamcrest, incremental, Twisted, vncdotool
Running setup.py install for Pillow ... error
ERROR: Command errored out with exit status 1:
command: /home/pi/.virtualenvs/papertty/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-cz_wrs2v/Pillow/setup.py'"'"'; file='"'"'/tmp/pip-install-cz_wrs2v/Pillow/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-161nk5do/install-record.txt --single-version-externally-managed --compile --install-headers /home/pi/.virtualenvs/papertty/include/site/python3.5/Pillow
cwd: /tmp/pip-install-cz_wrs2v/Pillow/
Complete output (174 lines):
running install
running build
running build_py
creating build
creating build/lib.linux-armv6l-3.5
creating build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageQt.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/TiffImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageDraw.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PcdImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ContainerIO.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/IptcImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/_tkinter_finder.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageOps.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PcxImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GbrImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/EpsImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GimpGradientFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/init.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FpxImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/SunImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/BufrStubImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/MspImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageShow.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ExifTags.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageChops.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/features.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PdfImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageMode.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageGrab.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/TiffTags.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImagePath.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/_binary.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/XbmImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FliImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageDraw2.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PixarImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FtexImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImagePalette.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/WalImageFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageStat.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GdImageFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PyAccess.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/CurImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/DcxImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/SgiImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/JpegImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GifImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/_util.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/MpegImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/TarIO.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PaletteFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/BdfFontFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageFilter.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GimpPaletteFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/main.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/XpmImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PalmImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PcfFontFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/WmfImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/JpegPresets.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GribStubImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/MpoImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/Hdf5StubImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageMorph.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FitsStubImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageEnhance.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/Jpeg2KImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PpmImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageColor.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageFont.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/_version.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/WebPImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/McIdasImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PdfParser.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageWin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageTransform.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PSDraw.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageTk.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/DdsImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageMath.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/MicImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/IcoImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageSequence.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/IcnsImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImtImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/Image.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageCms.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/TgaImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/XVThumbImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PngImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FontFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PsdImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/SpiderImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/BlpImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/BmpImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
running egg_info
writing src/Pillow.egg-info/PKG-INFO
writing top-level names to src/Pillow.egg-info/top_level.txt
writing dependency_links to src/Pillow.egg-info/dependency_links.txt
reading manifest file 'src/Pillow.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '.c'
warning: no files found matching '
.h'
warning: no files found matching '.sh'
warning: no previously-included files found matching '.appveyor.yml'
warning: no previously-included files found matching '.coveragerc'
warning: no previously-included files found matching '.codecov.yml'
warning: no previously-included files found matching '.editorconfig'
warning: no previously-included files found matching '.readthedocs.yml'
warning: no previously-included files found matching 'azure-pipelines.yml'
warning: no previously-included files matching '.git
' found anywhere in distribution
warning: no previously-included files matching '.pyc' found anywhere in distribution
warning: no previously-included files matching '
.so' found anywhere in distribution
no previously-included directories found matching '.azure-pipelines'
no previously-included directories found matching '.travis'
writing manifest file 'src/Pillow.egg-info/SOURCES.txt'
running build_ext

The headers or library files could not be found for jpeg,
a required dependency when compiling Pillow from source.

Please see the install instructions at:
   https://pillow.readthedocs.io/en/latest/installation.html

Traceback (most recent call last):
  File "/tmp/pip-install-cz_wrs2v/Pillow/setup.py", line 888, in <module>
    zip_safe=not (debug_build() or PLATFORM_MINGW),
  File "/home/pi/.virtualenvs/papertty/lib/python3.5/site-packages/setuptools/__init__.py", line 145, in setup
    return distutils.core.setup(**attrs)
  File "/usr/lib/python3.5/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/usr/lib/python3.5/distutils/dist.py", line 955, in run_commands
    self.run_command(cmd)
  File "/usr/lib/python3.5/distutils/dist.py", line 974, in run_command
    cmd_obj.run()
  File "/home/pi/.virtualenvs/papertty/lib/python3.5/site-packages/setuptools/command/install.py", line 61, in run
    return orig.install.run(self)
  File "/usr/lib/python3.5/distutils/command/install.py", line 583, in run
    self.run_command('build')
  File "/usr/lib/python3.5/distutils/cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "/usr/lib/python3.5/distutils/dist.py", line 974, in run_command
    cmd_obj.run()
  File "/usr/lib/python3.5/distutils/command/build.py", line 135, in run
    self.run_command(cmd_name)
  File "/usr/lib/python3.5/distutils/cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "/usr/lib/python3.5/distutils/dist.py", line 974, in run_command
    cmd_obj.run()
  File "/usr/lib/python3.5/distutils/command/build_ext.py", line 339, in run
    self.build_extensions()
  File "/tmp/pip-install-cz_wrs2v/Pillow/setup.py", line 687, in build_extensions
    raise RequiredDependencyException(f)
__main__.RequiredDependencyException: jpeg

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/tmp/pip-install-cz_wrs2v/Pillow/setup.py", line 903, in <module>
    raise RequiredDependencyException(msg)
__main__.RequiredDependencyException:

The headers or library files could not be found for jpeg,
a required dependency when compiling Pillow from source.

Please see the install instructions at:
   https://pillow.readthedocs.io/en/latest/installation.html


----------------------------------------

ERROR: Command errored out with exit status 1: /home/pi/.virtualenvs/papertty/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-cz_wrs2v/Pillow/setup.py'"'"'; file='"'"'/tmp/pip-install-cz_wrs2v/Pillow/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-161nk5do/install-record.txt --single-version-externally-managed --compile --install-headers /home/pi/.virtualenvs/papertty/include/site/python3.5/Pillow Check the logs for full command output.
(papertty) pi@raspberrypi:/PaperTTY $ ^C
(papertty) pi@raspberrypi:
/PaperTTY $ dir
`

Rewards

Thanks for authoring this. You should add a "Buy me a coffee" or similar reward so people can show you some appreciation.

Fix encoding issues

Implement "proper" support for different encodings and error handling, meaning that the program shouldn't for example crash because of a character that can't be drawn. For now it just barely works.

There's a few things to consider, such as:

  • virtual console charset (and char device to read from)
  • locale settings
  • glyph support in various fonts
  • tmux supports UTF-8 only, for example
  • etc.

Goal would be to handle any garbage without problems and displaying it as well as possible using default settings - if this were to be used as the only means to get output from a RPi, it should never crash.

Replace prints with Logging

Low priority, since journalctl can show the service stdout and there's not much output anyway, but when running as a service (or debugging), being able to configure the logging level might be a nice feature to have, and simple to implement.

Clean up and organize README

The main README is too long. There's old but valid documentation way too far to be comfortably scrolled to because of meandering hit-and-run updates and not having the time to keep the docs concise and updated.

Some stuff to do:

  • VNC feature should be included in the command line instructions
    • VNC instructions could be a bit more thorough, too
  • Images are nice to have, but they could be clickable thumbnails in tables (or something) so they won't take most of the space
  • Clean up, fix historical remarks etc.

This would be easiest for me to do, but since it's so hard to get a proper moment to do it, I've created this issue to nag me. And if I never get around to it, maybe someone else with a knack for documentation will :)

Multiple screen support?

Would this be in scope for this project? Hardware issues aside, I imagine straightforward configurations (e.g. 2x2 screens of the same size) would be pretty trivial to code. Of course, hardware would be the main problem and this isn't my area - does anyone have any ideas, or can link relevant discussions? Naively, it looks like only 8 pins are needed, and the Pi has more than that ... so maybe?

Trouble running VNC

I'm trying to make PaperTTY work through VNC, I have my Waveshare 9.7".
When running papertty --driver it8951 vnc --display 1 --sleep 0.1 --rotate 90
this is what happens:

$ papertty --driver it8951 vnc --display 1 --sleep 0.1 --rotate 90 Loading PIL font /home/pi/.local/lib/python3.7/site-packages/papertty/resources/tom-thumb.pil. Font size is ignored. width = 1200 height = 825 img_addr = 0011a1e0 firmware = SWv_0.2.1T lut = M841 VCOM = -2.00V Timeout to server localhost:1

Sorry if I'm being lame (new to this)

Test IT8951 displays

Comment on this issue for your experiences with the IT8951 support.

Tested:

  • 6" - works
  • 6" HD - works
  • 7.8" - works
  • 9.7" - works
  • 10.3" - works

Partial refresh seems broken on rpi hat 2.13" v2

I've just bought a pi Zero W and a 2.13" waveshare hat, looking forward to make a little distraction free word processor. I've managed to set almost all up, but oddly, using the driver for v2 I can only understand what is shown on the console when I launch a command with --nopartial. Otherwise, the screen only renders noise, or perhaps only some pixels become active.

I could still manage to use the device as intentded, as I want it to be sort of a reference of what I'm writing, and I don't think I'll be editing anything, but the full flashing is a bit annoying and the screen is supposed to be capable of partial refreshing.

Also, it is very likely that I am doin something wrong.

Cannot start papertty.py, missing PIL error

On a clean June 27, Raspbian Stretch Lite install on a Pi Zero W 1.1, I followed your installation instructions.

I set up the virtualenv with:

mkvirtualenv -p /usr/bin/python3 -r requirements.txt papertty

which says (the second time I ran it to be sure, which is why they're already satisfied):

Installing setuptools, pkg_resources, pip, wheel...done.
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: Pillow in /home/pi/.virtualenvs/papertty/lib/python3.5/site-packages (from -r requirements.txt (line 1)) (5.2.0)
Requirement already satisfied: RPi.GPIO in /home/pi/.virtualenvs/papertty/lib/python3.5/site-packages (from -r requirements.txt (line 2)) (0.6.3)
Requirement already satisfied: spidev in /home/pi/.virtualenvs/papertty/lib/python3.5/site-packages (from -r requirements.txt (line 3)) (3.2)
Requirement already satisfied: click in /home/pi/.virtualenvs/papertty/lib/python3.5/site-packages (from -r requirements.txt (line 4)) (6.7)

When I finally get into the PaperTTY virtualenv following the above, I receive the following when I run:

sudo ./papertty.py list

Traceback (most recent call last):
File "./papertty.py", line 14, in
import drivers.drivers_base as drivers_base
File "/home/pi/PaperTTY/drivers/drivers_base.py", line 18, in
from PIL import Image
ImportError: No module named 'PIL'

Any suggestions? This is a completely clean Pi Zero and I just imaged it from Raspbian.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.