{"id":13625876,"url":"https://github.com/bordaigorl/rmview","last_synced_at":"2025-05-16T15:06:40.959Z","repository":{"id":38393439,"uuid":"260553403","full_name":"bordaigorl/rmview","owner":"bordaigorl","description":"A live viewer for reMarkable written in PyQt5","archived":false,"fork":false,"pushed_at":"2024-07-30T12:23:09.000Z","size":5417,"stargazers_count":779,"open_issues_count":42,"forks_count":67,"subscribers_count":21,"default_branch":"vnc","last_synced_at":"2025-04-12T12:54:46.794Z","etag":null,"topics":["pyqt5","remarkable-tablet"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bordaigorl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-01T20:35:38.000Z","updated_at":"2025-04-07T15:40:53.000Z","dependencies_parsed_at":"2024-01-12T17:35:11.704Z","dependency_job_id":"b0274b67-7316-4c30-ae00-70cb8a25e840","html_url":"https://github.com/bordaigorl/rmview","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bordaigorl%2Frmview","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bordaigorl%2Frmview/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bordaigorl%2Frmview/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bordaigorl%2Frmview/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bordaigorl","download_url":"https://codeload.github.com/bordaigorl/rmview/tar.gz/refs/heads/vnc","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254553959,"owners_count":22090417,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["pyqt5","remarkable-tablet"],"created_at":"2024-08-01T21:02:04.343Z","updated_at":"2025-05-16T15:06:40.939Z","avatar_url":"https://github.com/bordaigorl.png","language":"Python","funding_links":[],"categories":["Python","remarkable-tablet","Screen Sharing/Streaming"],"sub_categories":["Template Builders"],"readme":"# rMview: a fast live viewer for reMarkable 1 and 2\n\n[![Demo](https://raw.githubusercontent.com/bordaigorl/rmview/vnc/screenshot.png)][demo]\n\n\n## Features\n\n* Demo [:rocket: here][demo]\n* Fast streaming of the screen of your reMarkable to a window in your computer\n* Support for reMarkable 1 and 2\n* Works with software version pre 2.8\n* Compatible with ScreenShare (post 2.9)\n* Supports colors (tablet is grayscale but original colors are preserved in rmview)\n* UI for zooming, panning, rotating, inverting colors\n* Pen tracking: a pointer follows the position of the pen when hovering on the reMarkable\n* Clone a frame into separate window for reference\n* Save screenshots as PNG\n\n## Compatibility\n\n|                | ScreenShare        | VNC Server         | rm2fb              |\n| -------------- | :----------------: | :----------------: | :----------------: |\n| RM1/2  \u003c v2.9  | :x:                | :white_check_mark: | :white_check_mark: |\n| RM1/2 \u003e= v2.9  | :white_check_mark: | :x:                | :x:                |\n\n\n\u003e :warning: **Update 2.9+ users** :warning::\n\u003e To use rmview with the ScreenShare feature you have to **first** start the ScreenShare from the tablet, and then start rmview.\n\n\n## Installation\n\nThe most efficient installation method is the semi-automatic one below, which requires a Python3 installation.\nIf you are looking for a standalone executable, check the [releases page](https://github.com/bordaigorl/rmview/releases) for executable bundles.\nIf there is no bundle for your operating system then follow the installation instructions below.\n\nAs a basic prerequisite you will need [Python3][py3] on your computer.\n\n\u003e :warning: Please make sure `pip` is pointing to the Python3 version if your system has Python2 as well.\nIf not, use `pip3` instead of `pip` in what follows.\n\n\u003e :warning: **WARNING** :warning::\n\u003e If you use [Anaconda][anaconda], please install the dependencies via `conda` (and not `pip`) then run `pip install .`.\n\n### Semi-automatic installation\n\nThe easiest installation method is by using `pip`, from the root folder of this repository:\n\n       pip install .\n\n(please note the command ends with a dot)\nwhich will install all required dependencies and install a new `rmview` command.\nIf you want to use the SSH tunnel feature, install with\n\n    pip install \".[tunnel]\"\n\nThen, from anywhere, you can execute `rmview` from the command line.\nThe tool will ask for the connection parameters and then ask permission to install the VNC server on the tablet.\nPress \u003ckbd\u003eAuto install\u003c/kbd\u003e to proceed.\n\nIf you plan to modify the source code, use `pip install -e .` so that when executing `rmview` you will be running your custom version.\n\n### Manual installation\n\nInstall the dependencies ([PyQt5][pyqt5], [Paramiko][paramiko], [Twisted][twisted], [PyJWT][pyjwt]) with `pip` or `conda` manually:\n\n    # install dependencies\n    pip install pyqt5 paramiko twisted pyjwt\n    pip install sshtunnel  # optional\n    # build resources file\n    pyrcc5 -o src/rmview/resources.py resources.qrc\n\nThen you can run the program with `python -m rmview` from the `src` folder.\n\n### Using Docker\n\nThis project contains a `Dockerfile` so that `rmview` and all its dependencies can be installed and run inside a Docker container.\nSince `rmview` not only reads your local configuration but also needs an X11 display, you should run `docker-run.sh` which takes care of the host mappings.\nPlease note that `docker-run.sh` is written for Unix-like OSes and expects your rmview configuration inside your local `$HOME/.config/rmview/` folder.\n\n## Usage and configuration\n\n**Suggested first use:**\nafter installing run `rmview`, insert when prompted the IP of your tablet and the password,\nas found in the \u003ckbd\u003eMenu / Settings / Help / Copyright and Licences\u003c/kbd\u003e menu of the tablet.\nThen, optionally, select \"Settings...\" from the context menu (or the error dialog) to open\nthe default configuration file which you can edit according to the documentation below.\n\nMore generally, you can invoke the program with\n\n    rmview [-v|-q] [config]\n\nThe optional `-v` flag makes the console output verbose, `-q` makes it quiet (only errors).\nThe optional `config` parameter is the filename of a json configuration file.\nIf the parameter is not found, the program will look for a `rmview.json` file in the current directory, or, if not found, for the path stored in the environment variable `RMVIEW_CONF`.\nIf none are found, or if the configuration is underspecified, the tool is going to prompt for address/password.\n\n### Configuration files\n\nThe supported configuration settings are below.\nLook in file `example.json` for an example configuration.\nAll the settings are optional.\n\n| Setting key              | Values                                                  | Default       |\n| ------------------------ | ------------------------------------------------------- | ------------- |\n| `ssh`                    | Connection parameters (see below)                       | `{}`          |\n| `backend`                | `\"auto\"`, `\"screenshare\"`, `\"vncserver\"`                | `\"auto\"`      |\n| `orientation`            | `\"landscape\"`, `\"portrait\"`, `\"auto\"`                   | `\"landscape\"` |\n| `pen_size`               | diameter of pointer in px                               | `15`          |\n| `pen_color`              | color of pointer and trail                              | `\"red\"`       |\n| `pen_trail`              | persistence of trail in ms                              | `200`         |\n| `background_color`       | color of window                                         | `\"white\"`     |\n| `invert_colors`          | if true, start the tablet with inverted colors          | `false`       |\n| `hide_pen_on_press`      | if true, the pointer is hidden while writing            | `true`        |\n| `show_pen_on_lift`       | if true, the pointer is shown when lifting the pen      | `true`        |\n| `forward_mouse_events`   | Send mouse events to tablet (see below)                 | `false`       |\n\n**PLEASE NOTE:**\nWhen `backend` is `auto`, if the tablet is using version 2.9 and above then `screenshare` is used;\notherwise `vncserver` is selected.\nNote that currently `screenshare` is only compatible with version 2.9 and above,\nand `vncserver` with version 2.8 and below.\n\nIf `forward_mouse_events` is enabled, clicks and mouse drags on the main window\nwill be sent to the tablet as touch events,\nmouse drags while pressing \u003ckbd\u003eCTRL\u003c/kbd\u003e will be sent as pen events, allowing drawing.\nThis option is only available if using `\"backend\": \"vncserver\"`, which in turn is only supported for rM software version below 2.8.\n\n\nConnection parameters are provided as a dictionary with the following keys (all optional):\n\n| Parameter         | Values                                                  | Comments                              |\n| ----------------- | ------------------------------------------------------- | ------------------------------------- |\n| `address`         | IP of remarkable                                        | tool prompts for it if missing        |\n| `auth_method`     | Either `\"password\"` or `\"key\"`                          | defaults to password if key not given |\n| `username`        | Username for ssh access on reMarkable                   | default: `\"root\"`                     |\n| `password`        | Password provided by reMarkable                         | not needed if key provided            |\n| `key`             | Local path to key for ssh                               | not needed if password provided       |\n| `timeout`         | Connection timeout in seconds                           | default: 1                            |\n| `host_key_policy` | `\"ask\"`, `\"ignore_new\"`, `\"ignore_all\"`, `\"auto_add\"`   | default: `\"ask\"` (description below)  |\n| `tunnel`          | True to connect to VNC server over a local SSH tunnel   | default: `false` (description below)  |\n| `tunnel_compression`   | True to enable compression for SSH tunnel          | default: `false` (description below)  |\n\nThe `address` parameter can be either:\n- a single string, in which case the address is used for connection\n- a list of strings, which will be presented at launch for selection\n\nTo establish a connection with the tablet, you can use any of the following:\n- Leave `auth_method`, `password` and `key` unspecified: this will ask for a password\n- Specify `\"auth_method\": \"key\"` to use a SSH key. In case an SSH key hasn't already been associated with the tablet, you can provide its path with the `key` setting.\n  If key is password protected, you can specify key passphrase using `password` parameter.\n- Provide a `password` in settings\n\nIf `auth_method` is `password` but no password is specified, then the tool will ask for the password on connection.\n\nAs a security measure, the keys used by known hosts are checked at each connection to prevent man-in-the-middle attacks.\nThe first time you connect to the tablet, it will not be among the known hosts.\nIn this situation rMview will present the option to add it to the known hosts, which should be done in a trusted network.\nUpdates to the tablet's firmware modify the key used by it, so the next connection would see the mismatch between the old key and the new.\nAgain rMview would prompt the user in this case with the option to update the key. This should be done in a trusted network.\nThe `host_key_policy` parameter controls this behaviour:\n- `\"ask\"` is the default behaviour and prompts the user with a choice when the host key is unknown or not matching.\n- `\"ignore_new\"` ignores unknown keys but reports mismatches.\n- `\"ignore_all\"` ignores both unknown and not matching keys. Use at your own risk.\n- `\"auto_add\"`  adds unknown keys without prompting but reports mismatches.\n\nThe old `\"insecure_auto_add_host\": true` parameter is deprecated and equivalent to `\"ignore_all\"`.\n\nIn case your `~/.ssh/known_hosts` file contains the relevant key associations, rMview should pick them up.\nIf you use the \"Add/Update\" feature when prompted by rMview (for example after a tablet update) then `~/.ssh/known_hosts` will be ignored from then on.\n\n:warning: **Key format error:**\nIf you get an error when connect using a key, but the key seems ok when connecting manually with ssh, you probably need to convert the key to the PEM format (or re-generate it using the `-m PEM` option of `ssh-keygen`). See [here](https://github.com/paramiko/paramiko/issues/340#issuecomment-492448662) for details.\n\nNOTE: If you have a lot of known hosts in system known hosts file (`~/.ssh/known_hosts`), you are advised to add\nknown host entry for remarkable to `~/.config/rmview_known_hosts` because paramiko can be very slow when loading\nlarge known hosts file which slows down the whole connection routine.\n\nIf your user system known hosts file already contains entry for remarkable, you can add it to rmview specific\nhosts file using this command:\n\n```bash\ncat ~/.ssh/known_hosts | grep 10.11.99.1 \u003e\u003e ~/.config/rmview_known_hosts\n```\n\nYou should of course replace IP with your remarkable IP.\n\n### Note on security and using an SSH tunnel\n\nBy default, this program will start VNC server on remarkable which listens on all the interfaces and doesn't expose\nany authentication mechanism or uses encryption.\n\nThis program will then connect to the VNC server over the IP specified in the config.\n\nNot using any authentication and exposing VNC server on all the network interfaces may be OK when connecting to the\nremarkable over USB interface, but when you are connecting to remarkable over WLAN, you are strongly encouraged to\nuse built-in SSH tunnel functionality.\n\nWhen SSH tunnel functionality is used, VNC server which is started on remarkable will only listen on localhost, this\nprogram will create SSH tunnel to the remarkable and connect to the VNC server over the local SSH tunnel.\n\nThis means that the connection will be encrypted and existing SSH authentication will be used.\n\n## To Do\n\n - [ ] Settings dialog\n - [ ] About dialog\n - [x] Pause stream of screen/pen\n - [ ] Binary bundles for Window, Linux and MacOs (PyInstaller?)\n - [ ] Add interaction for Lamy button? (1 331 1 down, 1 331 0 up)\n\n\n## Legacy reStreamer-like version\n\nThere are two versions of rMview, presenting the same interface but using different back-ends (thus requiring different setups on the reMarkable):\n\n* The \"VNC-based\" version, in the [`vnc` branch][vnc-branch] (default)\n* The \"reStreamer-like\" version, in the [`ssh` branch][ssh-branch]\n\nIn my tests, the VNC version is a clear winner.\nThe `ssh` branch of this repo hosts the reStreamer-like version for those who prefer it, but it should be considered unmaintained.\n\n\n## Credits\n\nThe VNC server running on the tablet is developed by @pl-semiotics:\n\n- [rM-vnc-server][vnc]\n\nSupport for the ScreenSharing feature is based on @ddvk's reverse-engineering of the authentication protocol.\n\nI took inspiration from the following projects:\n\n- [QtImageViewer](https://github.com/marcel-goldschen-ohm/PyQtImageViewer/)\n- [remarkable_mouse](https://github.com/Evidlo/remarkable_mouse/)\n- [reStream](https://github.com/rien/reStream)\n- [VNC client](https://github.com/sibson/vncdotool) originally written by Chris Liechti\n\nIcons adapted from designs by Freepik, xnimrodx from www.flaticon.com\n\nThanks to @adem, @ChrisPattison, and @jlbas for their [PRs](https://github.com/bordaigorl/rmview/issues?q=is%3Apr+is%3Aclosed).\n\n## Disclaimer\n\nThis project is not affiliated to, nor endorsed by, [reMarkable AS](https://remarkable.com/).\n**I assume no responsibility for any damage done to your device due to the use of this software.**\n\n## Licence\n\nGPLv3\n\n[vnc]: https://github.com/pl-semiotics/rM-vnc-server\n[demo]: https://www.reddit.com/r/RemarkableTablet/comments/gtjrqt/rmview_now_with_support_for_vnc/\n[ssh-branch]: https://github.com/bordaigorl/rmview/tree/ssh\n[vnc-branch]: https://github.com/bordaigorl/rmview/tree/vnc\n\n[py3]: https://www.python.org/downloads/\n[anaconda]: https://docs.anaconda.com/anaconda\n[pyqt5]: https://www.riverbankcomputing.com/software/pyqt/\n[paramiko]: http://www.paramiko.org/\n[twisted]: https://twistedmatrix.com/trac/\n[pyjwt]: https://pypi.org/project/PyJWT/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbordaigorl%2Frmview","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbordaigorl%2Frmview","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbordaigorl%2Frmview/lists"}