GithubHelp home page GithubHelp logo

brunodles / linux-second-screen Goto Github PK

View Code? Open in Web Editor NEW
189.0 16.0 23.0 70 KB

Scripts to repurpose old android device as second monitor on linux

License: MIT License

Shell 100.00%
linux adb lockscreen android android-device vnc ssh bash

linux-second-screen's Introduction

linux-second-screen

Scripts to repurpose old android device as second monitor on linux

Warnning

This script is using Legacy nVidea Driver and may not be compatible anymore. It was created on 2017 and it's not actively maintained. Please be carefull if you insist to use it. One alternative cold be using the evdi kernel module. Look here for more details.

Usage

This repo have many bash scripts to interact with android using adb. Each script have it's own function.

Device

A simple wrapper to select target device by name.

Add device

device add droid2 015F13B817021010

Usage

device droid2 adb shell
device droid2 <any other command>

Display

Change host (linux) display settings. With this script we can create, change settings or remove of virtual displays. It does not care about positioning the virtual displays, this should be done using your favorite monitor app. E.g.: xrandr, arandr or some other you like.

droid

General commands for android. This script is a wrapper for adb, with it we can:

  • start an app to resolve one url
  • open pre-defined activites
  • set date and time
  • get device ip
  • connect to wifi
  • get sdk
  • get model
  • get and change orientation
  • change some developer settings
  • get screen resolution
  • shutdown device
  • record and playback inputs

input

An reimplementation of input script on android. Some devices doesn't have tap and swipe command, so this script tries to reprotuce theses commands.

keyboard

Send multiple KEY_EVENTS in a single string. The idea here is to simplify the way to send keyboard inputs. This script replaces (space character) by %s the one is used by key event. Also send key events by name, just using UPPERCASED text.

# We can input text, then key, the text again, the order doesn't matter
keyboard "My name is Bruno;ENTER;This one is probably on the next field"

# we can also send multiple key events
keyboard "UP;UP;DOWN;DOWN;LEFT;RIGHT;LEFT;RIGHT"

terminal

This script is a wrapper to interact with screen, a screen manager for terminal. Using screen we can share a terminal session like. The idea is use it like a vnc, and connect other devices to keep a terminal session running on then like server logs or status.

vnc

A wrapper for vnc commands. We have only two commands here:

  • Start - wich starts vnc for a virtual display
  • window - wich starts vnc for a given window

Setup

First we need to run setup to install all tools we need to run this. There are tools that we doesn't provide, like adb (Android Debug Bridge), it comes with android sdk. You will have to setup adb into your path.

Then run setup. You will be prompt to put your password to install necessary tools. We may split setup into multiple phases later, for optional instalation.

# install tools
./main setup

# create virtual displays, only works with intel's graphic card
# you may change 2 by any number of virtual displays you want
./display create 2

Restart you computer, if you created virtual display. When you login again you will see VIRTUAL as possible video output.

How to create a extended display? - Intel's graphic card only

With these scripts it gets simple. But we still need to make some touches to make then integrated. may I make this on main.

I high recomend you to write a script to start your own devices, this will make your life a lot easier. So I will write the step-by-step in a script-like.

Step 1 - get information from your device

We need to know the resolution from our device, it's orientation and screen size inches. Based on these two informations we can create one virtual display.

# resolution - this one may fail, so you may have to get this information from internet
# ./droid resolution
resolution=$(./droid resolution)

# replace resolution ´x´ by ´ ´ (space)
resolution=${resolution/x/ }

# orientation
# ./droid orientation
orientation=$(./droid orientation)

# inches - this one may fail too, cause we need resolution and density to calculate an aproximate screen inches
# ./droid inches
inches=$(./droid inches)

Step 2 - calculate virtual display resolution

Now we have the resolution let's calculate an virtual display size

# ./display calcRes $resolution $inches
virtual=$(./display calcRes $resolution $inches | grep virtual | grep -Po "(\d+x\d+)")

Step 3 - set virtual display resolution

Let's set the resolution for display 1. Depending on orientation we change order of width and height.

virtual=(${virtual/x/ })
width=${virtual[0]}
height=${virtual[1]}
if [ "$orientation" == 0 ] || [ "$orientation" == 2]; then
  # portrait
  ./display setRes 1 $width $height
else
  # landscape
  ./display setRes 1 $height $width
fi

Step 4 - share display on vnc

./vnc start 1

Step 5 - share vnc connection directly to device

./droid start vnc://{your local ip address}:5900

Here we can also use adb reverse tcp:5900 tcp:5900 to make a tunnel using usb cable, but it only works on android 5.0+.

Step 6 - clean

Shutdown display and remove configurations from it.

./display remove 1

if you still want to do it by hand

Follow this tutorial.

Similar apps

This app will be made by the rage because we have a lot of apps for all other platforms Only linux isn't supported by those apps.

Splashtop appear to have a beta, for linux.
\o/

linux-second-screen's People

Contributors

brunodles 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

linux-second-screen's Issues

Create install command for droid.sh

Is your feature request related to a problem? Please describe.
Create a function to install apks.

Describe the solution you'd like
We may have some urls for apks that we want to push to our device. e.g: vnc and ssh.
The function should be able to download the apk and then push to device.

Error with display clean

I am on Ubuntu 20.04.3 LTS
I ran ./display create 1
When i wanted to remove it, i used ./display clean 1, but it outputs Can't find a valid mode
My screen is shattering
Output of xrandr is this
I have tried to reinstall drivers and delete configs but nothing works.
Please help how to undo ./display create 1

Multiscreen xrandr error

If I use two screens than it fails with xrandr: Configure crtc 2 failed
Is there a workaround?

Support evdi

Is your feature request related to a problem? Please describe.
Currently there is only support for creating virtual displays with legacy intel driver.

Describe the solution you'd like
Using evdi kernel module it's possible to create a driver-independent virtual display.
I found it at https://unix.stackexchange.com/a/585078 (for me steps 3 and 4 were not needed, but also I couldn't make more than one virtual display).

The problems with this solution:

  • it requires manual kernel module installation.
  • If kernel module is loaded while Xorg is running, then Xorg freezes.

Describe alternatives you've considered

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.