Dear Community:
The Openpilot Community needs your help to continue to keep opc.ai's lights on and support the path to Workbench v0.2. With only a one person crew and without commercial funding it's not always financially feasible to fund these services out of pocket. Please consider becoming a Patreon supporter of the Openpilot Community project and receive exclusive perks and benefits!
Become a patreon Learn more Maybe Later

Anonymous
Oct 19, 2018·5 min read

Capture a screenshot on EON (without Workbench)

UPDATE:
Try downloading Workbench, our new desktop app that actually has built in support for taking screenshots of your EON.

If you want a way to capture a quick screenshot with the EON then look no further. It's honestly the best I could come up with given my limited knowledge with Android and my options so if you have better solution please reach out and let me know.

The secret seems to lie in getting into the su which essentially elevates your privilages to run commands on the Android shell.

I will put this in a single-line script eventually but here is the commands to run quick screenshots.

SSH into the EON first and then...

su
mkdir -p /data/screenshots

Create this shell script

Copy this script below (CMD+C)

#!/bin/sh

# imgur script by Bart Nagel <bart@tremby.net>
# version 4.1
# I release this into the public domain. Do with it what you will.

# Required: curl
#
# Optional: xsel or xclip for automatically putting the URLs on the X selection
# for easy pasting
#
# Instructions:
# Put it somewhere in your path and maybe rename it:
#   mv ~/Downloads/imgurbash.sh ~/bin/imgur
# Make it executable:
#   chmod +x ~/bin/imgur
# Optional, since Alan kindly provided an API key for this script: stick your
# API key in the top:
#   vim ~/bin/imgur
# Upload an image:
#   imgur images/hilarious/manfallingover.jpg
# Upload multiple images:
#   imgur images/delicious/cake.png images/exciting/bungeejump.jpg
# The URLs will be displayed (and the delete page's URLs will be displayed on
# stderr). If you have xsel or xclip the URLs will also be put on the X
# selection, which you can usually paste with a middle click.

# API Key provided by Alan@imgur.com
apikey="6684034fe3ce577"

# function to output usage instructions
function usage {
    echo "Usage: $(basename $0) <filename> [<filename> [...]]" >&2
    echo "Upload images to imgur and output their new URLs to stdout. Each one's" >&2
    echo "delete page is output to stderr between the view URLs." >&2
    echo "If xsel or xclip is available, the URLs are put on the X selection for" >&2
    echo "easy pasting." >&2
}

# check API key has been entered
if [ "$apikey" = "Your API key" ]; then
    echo "You first need to edit the script and put your API key in the variable near the top." >&2
    exit 15
fi

# check arguments
if [ "$1" = "-h" -o "$1" = "--help" ]; then
    usage
    exit 0
elif [ $# == 0 ]; then
    echo "No file specified" >&2
    usage
    exit 16
fi

# check curl is available
type curl >/dev/null 2>/dev/null || {
    echo "Couln't find curl, which is required." >&2
    exit 17
}

clip=""
errors=false

# loop through arguments
while [ $# -gt 0 ]; do
    file="$1"
    shift

    # check file exists
    if [ ! -f "$file" ]; then
        echo "file '$file' doesn't exist, skipping" >&2
        errors=true
        continue
    fi

    # upload the image
    response=$(curl -H "Authorization: Client-ID $apikey" -F "image=@$file" \
            https://api.imgur.com/3/upload.xml)
    # the "Expect: " header is to get around a problem when using this through
    # the Squid proxy. Not sure if it's a Squid bug or what.
    if [ $? -ne 0 ]; then
        echo "Upload failed" >&2
        errors=true
        continue
    elif [ $(echo $response | grep -c "<error_msg>") -gt 0 ]; then
        echo "Error message from imgur:" >&2
        echo $response | sed -r 's/.*<error_msg>(.*)<\/error_msg>.*/\1/' >&2
        errors=true
        continue
    fi

    # parse the response and output our stuff
    url=$(echo $response | sed -r 's/.*<link>(.*)<\/link>.*/\1/')
 deleteurl="http://i.imgur.com/delete/$(echo $response |\
 sed -r 's/.*<deletehash>(.*)<\/deletehash>.*/\1/')"
    echo $url
    echo "Delete page: $deleteurl" >&2

    # append the URL to a string so we can put them all on the clipboard later
    clip="$clip$url
"
done

# put the URLs on the clipboard if we have xsel or xclip
if [ $DISPLAY ]; then
    { type xsel >/dev/null 2>/dev/null && echo -n $clip | xsel; } \
        || { type xclip >/dev/null 2>/dev/null && echo -n $clip | xclip; } \
        || echo "Haven't copied to the clipboard: no xsel or xclip" >&2
else
    echo "Haven't copied to the clipboard: no \$DISPLAY" >&2
fi

if $errors; then
    exit 1
fi

Run this script inside your SSH terminal window.

nano /data/imgupload.sh

And paste the script you copied earlier into this file.

Now hit CTRL+X and Y to save the file.

Now make the script executable with:

chmod +x /data/imgupload.sh

Create a screenshot...

screencap -d /data/screenshots/screenshot.png

To upload the screenshot...

/data/screenshots/imgupload.sh /data/screenshots/screenshot.png

You could wrap all of this up in a single shell script...

#!/bin/sh

// elevates privilates
su

// makes directory if it doesn't exist...
mkdir -p /data/screenshots

// change into screenshots directory
cd /data/screenshots/

// capture screenshot
screencap -d /data/screenshots/screenshot.png

./imgupload.sh ./screenshot.png

Keep in mind, this is not necessarily working code.

But you get the idea of what we're going for here.

The earlier commands should work great though.