[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-5523":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":47,"readmeContent":48,"aiSummary":49,"trendingCount":16,"starSnapshotCount":16,"syncStatus":50,"lastSyncTime":51,"discoverSource":52},5523,"Weylus","H-M-H\u002FWeylus","H-M-H","Use your tablet as graphic tablet\u002Ftouch screen on your computer.","",null,"Rust",9298,368,55,141,0,3,30,134,22,94.7,"Other",false,"master",true,[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"android","android-application","app","browser","ffmpeg","hardware-acceleration","ipados","linux","multi-touch","remote-desktop","rust","screen-mirroring","stylus","tablet","touch-screen","uinput","wayland","webapp","x11","xdg-desktop-portal","2026-06-12 04:00:25","# Weylus\n![Build](https:\u002F\u002Fgithub.com\u002FH-M-H\u002FWeylus\u002Fworkflows\u002FBuild\u002Fbadge.svg)\n\nWeylus turns your tablet or smart phone into a graphic tablet\u002Ftouch screen for your computer!\n\nWeylus in action with [Xournal++](https:\u002F\u002Fgithub.com\u002Fxournalpp\u002Fxournalpp):\n\n![Weylus in action](In_action.gif)\n\n## Table of Contents\n* [Features](#features)\n* [Installation](#installation)\n    * [Packages](#packages)\n* [Running](#running)\n    * [Fullscreen](#fullscreen)\n    * [Keyboard Input](#keyboard-input)\n    * [Automation](#automation)\n    * [Linux](#linux)\n        * [Wayland](#wayland)\n        * [Hardware Acceleration](#hardware-acceleration)\n        * [Weylus as Second Screen](#weylus-as-second-screen)\n            * [Intel GPU on Xorg with Intel drivers](#intel-gpu-on-xorg-with-intel-drivers)\n            * [Dummy Plugs](#dummy-plugs)\n            * [Other Options](#other-options)\n        * [Encryption](#encryption)\n    * [macOS](#macos)\n        * [Hardware Acceleration](#hardware-acceleration-1)\n    * [Windows](#windows)\n        * [Hardware Acceleration](#hardware-acceleration-2)\n* [Building](#building)\n    * [Docker](#docker)\n* [How does this work?](#how-does-this-work)\n    * [Stylus\u002FTouch](#stylustouch)\n    * [Screen mirroring & window capturing](#screen-mirroring--window-capturing)\n* [FAQ](#faq)\n\n## Features\n- Control your mouse with your tablet\n- Mirror your screen to your tablet\n- Send keyboard input using physical keyboards\n- Hardware accelerated video encoding\n\nThe above features are available on all Operating Systems but Weylus works best on Linux. Additional\nfeatures on Linux are:\n- Support for a stylus\u002Fpen (supports pressure and tilt)\n- Multi-touch: Try it with software that supports multi-touch, like Krita, and see for yourself!\n- Capturing specific windows and only drawing to them\n- Faster screen mirroring\n- Tablet as second screen\n\n## Installation\nJust grab the latest release for your OS from the\n[releases page](https:\u002F\u002Fgithub.com\u002FH-M-H\u002FWeylus\u002Freleases) and install it on your computer. No apps\nexcept a modern browser (Firefox 80+, iOS\u002FiPadOS 13+) are required on your tablet. **If you run\nLinux make sure to follow the instructions described [here](#linux) to enable uinput for features\nlike pressure sensitivity and multitouch!**\n\n### Packages\nAUR packages for Weylus are available here:\n- From source: [weylus](https:\u002F\u002Faur.archlinux.org\u002Fpackages\u002Fweylus\u002F)\n- Prebuilt binary: [weylus-bin](https:\u002F\u002Faur.archlinux.org\u002Fpackages\u002Fweylus-bin\u002F)\n\n## Running\nStart Weylus, preferably set an access code in the access code box and press the Start button. This\nwill start a webserver running on your computer. To control your computer with your tablet you need\nto open the url `http:\u002F\u002F\u003Caddress of your computer>:\u003Cport set in the menu, default is 1701>`, if\npossible Weylus will display to you the url you need to open and show a QR code with the encoded\naddress. If you have a firewall running make sure to open a TCP port for the webserver (1701 by\ndefault) and the websocket connection (9001 by default).\n\nOn many Linux distributions this is done with ufw:\n```\nsudo ufw allow 1701\u002Ftcp\nsudo ufw allow 9001\u002Ftcp\n```\n\nPlease only run Weylus in networks you trust as there is no encryption to enable minimal latencies.\n\n### Fullscreen\nYou may want to add a bookmark to your home screen on your tablet as this enables running Weylus in\nfull screen mode (on iOS\u002FiPadOS this needs to be done with Safari). If you are not on iOS\u002FiPadOS\nthere is a button to toggle full screen mode.\n\n### Keyboard Input\nWeylus supports keyboard input for physical keyboards, so if you have a Bluetooth keyboard, just\nconnect it to your tablet and start typing. Due to technical limitations onscreen keyboards are not\nsupported.\n\n### Automation\nWeylus provides some features to make automation as convenient as possible. There is a command-line\ninterface; `--no-gui` for example starts Weylus in headless mode without a gui. For more options see\n`weylus --help`. If you want to run a specific script e.g., once a client connects to your computer\nyou can do so by parsing the log Weylus generates. You may want to enable more verbose logging by\nsetting the environment variable `WEYLUS_LOG_LEVEL` to `DEBUG` or `TRACE` as well as\n`WEYLUS_LOG_JSON` to `true` to enable easily parseable JSON logging.\n\n### Linux\nWeylus uses the `uinput` interface to simulate input events on Linux. **To enable stylus and\nmulti-touch support `\u002Fdev\u002Fuinput` needs to be writable by Weylus.** To make `\u002Fdev\u002Fuinput`\npermanently writable by your user, run:\n```sh\nsudo groupadd -r uinput\nsudo usermod -aG uinput $USER\necho 'KERNEL==\"uinput\", MODE=\"0660\", GROUP=\"uinput\", OPTIONS+=\"static_node=uinput\"' \\\n| sudo tee \u002Fetc\u002Fudev\u002Frules.d\u002F60-weylus.rules\n```\n\nThen, either reboot, or run\n\n```sh\nsudo udevadm control --reload\nsudo udevadm trigger\n```\n\nthen log out and log in again. To undo this, run:\n\n```sh\nsudo rm \u002Fetc\u002Fudev\u002Frules.d\u002F60-weylus.rules\n```\n\nThis allows your user to synthesize input events system-wide, even when another user is logged in.\nTherefore, untrusted users should not be added to the uinput group.\n\n#### Wayland\nWeylus offers experimental support for Wayland. Installing `pipewire` and `xdg-desktop-portal` as\nwell as one of:\n- `xdg-desktop-portal-gtk` for GNOME\n- `xdg-desktop-portal-kde` for KDE\n- `xdg-desktop-portal-wlr` for wlroots-based compositors like Sway\nis required.\n\nThere are still some things that do not work:\n- input mapping for windows\n- displaying proper window names\n- capturing the cursor\n\n#### Hardware Acceleration\nOn Linux Weylus supports hardware accelerated video encoding through the Video Acceleration API\n(VAAPI) or Nvidia's NVENC. By default hardware acceleration is disabled as quality and stability of\nthe hardware encoded video stream varies widely among different hardware and sufficient quality can\nnot be guaranteed. If VAAPI is used it is possible to select a specific driver by setting the\nenvironment variable `LIBVA_DRIVER_NAME`. You can find possible values with the command\n`ls \u002Fusr\u002Flib\u002Fdri\u002F | sed -n 's\u002F^\\(\\S*\\)_drv_video.so$\u002F\\1\u002Fp'`. On some distributions the drivers may\nnot reside in `\u002Fusr\u002Flib\u002Fdri` but for example in `\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fdri` and may not be found\nby Weylus. To force Weylus to search another directory for drivers, the environment variable\n`LIBVA_DRIVERS_PATH` can be set.\nAdditionally you can specify the VAAPI device to use by setting `WEYLUS_VAAPI_DEVICE`; by default\ndevices can be found in `\u002Fdev\u002Fdri`. On some systems this is not optional and this variable must be\nset. If VAAPI doesn't work out of the box for you, have a look into `\u002Fdev\u002Fdri`, often setting\n`WEYLUS_VAAPI_DEVICE=\u002Fdev\u002Fdri\u002FrenderD129` is already the solution. Note that you may need to install\nthe driver(s) first.\n\nNvidias NVENC is very fast but delivers a video stream of noticeably lower quality (at least on my\nGeForce GTX 1050 Mobile GPU) but more recent GPUs should provide higher quality. For this to work\nnvidia drivers need to be installed.\n\n#### Weylus as Second Screen\nThere are a few possibilities to use Weylus to turn your tablet into a second screen.\n\n##### Intel GPU on Xorg with Intel drivers\nIntel's drivers support creating virtual outputs that can be configured via xrandr.\n\nBut first a word of warning: The following configuration may break starting the X server. This means\nyou might end up without a graphical login or X may get stuck and just display a black screen. So\nmake sure you know what you are doing or are at least able to recover from a broken X server.\n\nYou will need to install the `xf86-video-intel` driver and create the file\n`\u002Fetc\u002FX11\u002Fxorg.conf.d\u002F20-intel.conf` with the following contents:\n```text\nSection \"Device\"\n    Identifier \"intelgpu0\"\n    Driver \"intel\"\n\n    # this adds two virtual monitors \u002F devices\n    Option \"VirtualHeads\" \"2\"\n\n    # if your screen is flickering one of the following options might help\n    # Option \"TripleBuffer\" \"true\"\n    # Option \"TearFree\"     \"true\"\n    # Option \"DRI\"          \"false\"\nEndSection\n```\nAfter a reboot `xrandr` will show two additional monitors `VIRTUAL1` and `VIRTUAL2` and can be used\nto configure them. To activate `VIRTUAL1` with a screen size of 1112x834 and a refresh rate of 60\nfps the following commands can be used:\n```console\n> # this generates all input parameters xrandr needs\n> #from a given screen resolution and refresh rate\n> gtf 1112 834 60\n\n  # 1112x834 @ 60.00 Hz (GTF) hsync: 51.78 kHz; pclk: 75.81 MHz\n  Modeline \"1112x834_60.00\"  75.81  1112 1168 1288 1464  834 835 838 863  -HSync +Vsync\n> # setup the monitor\n> xrandr --newmode \"1112x834_60.00\"  75.81  1112 1168 1288 1464  834 835 838 863  -HSync +Vsync\n> xrandr --addmode VIRTUAL1 1112x834_60.00\n> xrandr --output VIRTUAL1 --mode 1112x834_60.00\n> # check if everything is in order\n> xrandr\n```\nNow you should be able to configure this monitor in your system setting like a regular second\nmonitor and for example set its position relative to your primary monitor.\n\nAfter setting up the virtual monitor start Weylus and select it in the capture menu. You may want to\nenable displaying the cursor in this case. That is it!\n\n##### Dummy Plugs\nWeylus detects if you use multiple monitors and you can select the one you want to mirror. So if you\nwant to use Weylus as a second screen you could just buy another monitor. Obviously this is\npointless as if you already bought that monitor, there is no need to use Weylus! This is where so\ncalled **HDMI\u002FDisplayport\u002FVGA Dummy Plugs** come in handy. These are small devices that pretend to\nbe a monitor but only cost a fraction of the price of an actual monitor.\n\nOnce you have bought one and plugged it into your computer you can configure an additional screen\njust like you would do with an actual one and then use Weylus to mirror this virtual screen.\n\n##### Other Options\nThe following is untested\u002Fincomplete, feel free to do more research and open a pull request to\nexpand documentation on this!\n- On Wayland with sway there is `create_output` which can be used to [create headless\n  outputs](https:\u002F\u002Fgithub.com\u002Fswaywm\u002Fsway\u002Freleases\u002Ftag\u002F1.5), unfortunately it is not documented how\n  to actually do that: https:\u002F\u002Fgithub.com\u002Fswaywm\u002Fsway\u002Fissues\u002F5553\n- On Wayland with GNOME recently there has been added an option to [create virtual monitors with\n  mutter](https:\u002F\u002Fgitlab.gnome.org\u002FGNOME\u002Fmutter\u002F-\u002Fmerge_requests\u002F1698)\n\n#### Encryption\nBy default Weylus comes without encryption and should only be run on networks you trust. If this is\nnot the case it's strongly advised to set up a TLS proxy. One option is to use\n[hitch](https:\u002F\u002Fhitch-tls.org\u002F), an example script that sets up encryption is located at\n`weylus_tls.sh`.\nBut any TLS proxy should work just fine.\n\nNote that the mentioned script works by creating a self-signed certificate. This means your browser\nwill most likely display a scary looking but completely unfounded message telling you how incredibly\ndangerous it is to trust the certificate you yourself just created; this can be safely ignored!\n\nIn case you are using Firefox: There is a [bug](https:\u002F\u002Fbugzilla.mozilla.org\u002Fshow_bug.cgi?id=1187666)\nthat prevents users from accepting self-signed certificates for websocket connections. A workaround\nis to directly open the websocket connection via the URL bar and accept the certificate there. After\naccepting the connection will of course fail as the browser expects https and not wss as protocol.\n\nSadly this solution is anything but frictionless and I am unhappy with the current state of affairs.\nThis is also another reason why encryption is not enabled by default, self-signed certificates are\njust too painful to handle nowadays. I'd gladly welcome any proposals to improve the situation!\n\n### macOS\nWeylus needs some permissions to work properly, make sure you enable:\n- Incoming connections\n- Screen capturing\n- Controlling your desktop\n\n#### Hardware Acceleration\nWeylus can make use of the Videotoolbox framework on macOS for hardware acceleration. In my tests\nthe video quality has been considerably worse than that using software encoding and thus\nVideotoolbox is disabled by default.\n\n### Windows\n\n#### Hardware Acceleration\nWeylus can make use of Nvidias NVENC as well as Microsoft's MediaFoundation for hardware accelerated\nvideo encoding. Due to widely varying quality it is disabled by default.\n\n## Building\nTo build Weylus you need to install Rust, Typescript, make, git, a C compiler, nasm and bash. `cargo\nbuild` builds the project. By default Weylus is build in debug mode, if you want a release build run\n`cargo build --release`. On Linux some additional dependencies are required to build Weylus. On\nDebian or Ubuntu they can be installed via:\n```sh\napt-get install -y libx11-dev libxext-dev libxft-dev libxinerama-dev libxcursor-dev libxrender-dev \\\nlibxfixes-dev libxtst-dev libxrandr-dev libxcomposite-dev libxi-dev libxv-dev autoconf libtool-bin \\\nnvidia-cuda-dev pkg-config libdrm-dev libpango1.0-dev libgstreamer1.0-dev \\\nlibgstreamer-plugins-base1.0-dev libdbus-1-dev\n```\n\nOn Fedora, they can be installed via:\n```sh\nsudo dnf install libXext-devel libXft-devel libXinerama-devel libXcursor-devel libXrender-devel \\\nlibXfixes-devel libXtst-devel libXrandr-devel libXcomposite-devel libXi-devel libXv-devel autoconf libtool \\\npkg-config libdrm-devel pango-devel gstreamer1-devel \\\ngstreamer1-plugins-base-devel dbus-devel nasm npm\n```\nAfter npm is installed, typescript must be installed by:\n```sh\nsudo npm install typescript -g\n```\n\nNote that building for the first time may take a while as by default ffmpeg needs to be built. On\nWindows only msvc is supported as C compiler; it is, however, possible to cross compile on Linux for\nWindows using minGW.\n\nIn case you do not want to build ffmpeg and libx264 via the supplied build script you can create the\ndirectory `deps\u002Fdist` yourself and copy static ffmpeg libraries built with support for libx264 and a\nstatic version of libx264 into `deps\u002Fdist\u002Flib`. Additional `deps\u002Fdist\u002Finclude` needs to be filled\nwith ffmpeg's include header files. For hardware acceleration to work ffmpeg needs to be built with\nadditional flags depending on your OS: Consult the variable `FFMPEG_EXTRA_ARGS` in `deps\u002Fbuild.sh`\nfor details. Furthermore, for VAAPI on Linux a static version of libva is required as well.\n\nThe build script will only try to build ffmpeg if the directory `deps\u002Fdist` does not exist.\n\nAlternatively passing `--features ffmpeg-system` to cargo will build Weylus using the system's\nversion of ffmpeg. This is disabled by default for compatibility reasons, on newer systems this\nshould not pose a problem and using the system libraries is advised.\n\n### Docker\nIt is also possible to build the Linux version inside a docker container. The Dockerfile used is\nlocated at [docker\u002FDockerfile](docker\u002FDockerfile). This is also how the official release is built.\nBuilding works like\nthis:\n```console\ndocker run -it hhmhh\u002Fweylus_build bash\nroot@f02164dbfa18:\u002F# git clone https:\u002F\u002Fgithub.com\u002FH-M-H\u002FWeylus\nCloning into 'Weylus'...\nremote: Enumerating objects: 10, done.\nremote: Counting objects: 100% (10\u002F10), done.\nremote: Compressing objects: 100% (7\u002F7), done.\nremote: Total 827 (delta 1), reused 6 (delta 0), pack-reused 817\nReceiving objects: 100% (827\u002F827), 5.38 MiB | 7.12 MiB\u002Fs, done.\nResolving deltas: 100% (431\u002F431), done.\nroot@f02164dbfa18:\u002F# cd Weylus\u002F\nroot@f02164dbfa18:\u002FWeylus# cargo deb\n   Compiling\n   ...\n```\nOnce the build is finished you can for example copy the binary from the container to your file\nsystem like this:\n```sh\ndocker cp f02164dbfa18:\u002FWeylus\u002Ftarget\u002Frelease\u002Fweylus ~\u002Fsome\u002Fpath\u002Fweylus\n```\nThe .deb is located at `\u002FWeylus\u002Ftarget\u002Fdebian\u002F`.  Please note that the container ID will most likely\nnot be `f02164dbfa18` if you run this yourself, replace it accordingly.\n\n## How does this work?\n### Stylus\u002FTouch\nModern browsers expose so called\n[PointerEvents](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FPointerEvent) that can convey not\nonly mouse but additionally stylus\u002Fpen and touch information. Weylus sets up a webserver with the\ncorresponding javascript code to capture these events. The events are sent back to the server using\nwebsockets.\nWeylus then processes these events using either the generic OS independent backend, which only\nsupports controlling the mouse or on Linux the uinput backend can be used. It makes use of the\nuinput Linux kernel module which supports creating a wide range of input devices including mouse,\nstylus and touch input devices.\n\n### Screen mirroring & window capturing\nEither the generic backend is used which is less efficient and only captures the whole screen or on\nLinux xlib is used to connect to the X-server and do the necessary work of getting window\ninformation and capturing the window\u002Fscreen. To make things fast the \"MIT-SHM - The MIT Shared\nMemory Extension\" is used to create shared memory images using `XShmCreateImage`. If Wayland instead\nof X11 is running, PipeWire and GStreamer is used to capture the screen. The images captured are\nthen encoded to a video stream using ffmpeg. Fragmented MP4 is used as container format to enable\nbrowsers to play the stream via the Media Source Extensions API. The video codec used is H.264 as\nthis is widely supported and allows very fast encoding as opposed to formats like AV1. To minimize\ndependencies ffmpeg is statically linked into Weylus.\n\n## FAQ\nQ: Why does the page not load on my tablet and instead I get a timeout?\u003Cbr>\nA: There probably is some kind of firewall running, make sure the ports Weylus uses are opened.\n\nQ: Why do I get the error `ERROR Failed to create uinput device: CError: code...`?\u003Cbr>\nA: uinput is probably misconfigured, have you made sure to follow all instructions and logged out\nand in again? You may also be running a very old kernel that does not support the required features.\nIn that case try to upgrade your system or use a newer one.\n\nQ: Why is the \"Capture\" drop down empty and the screen not mirrored?\u003Cbr>\nA: It is possible that only the port for the webserver but not the websocket has been opened, check\nthat both ports have been opened.\n\nQ: Why can I not select any windows in the \"Capture\" drop down and only see the whole screen.\u003Cbr>\nA: If you are running Weylus on MacOS or Windows this feature is unfortunately not implemented. On\nLinux it is possible that your window manager does not support\n[Extended Window Manager Hints](https:\u002F\u002Fspecifications.freedesktop.org\u002Fwm-spec\u002Flatest\u002F) or that you\nneed to activate them first, like for XMonad.\n\nQ: Do I have to follow the instructions to setup Weylus as second screen too?\u003Cbr>\nA: No, this is strictly optional.\n\nQ: Why am I unable to connect my tablet to the URL displayed by Weylus?\u003Cbr>\nA: It is possible that your computer and WiFi connected tablet are on different networks, make sure\nthey are on the same network.\n\nQ: Why does this not run on Firefox for Android?\u003Cbr>\nA: Actually it does, just make sure Firefox version 80+ is installed.\n\nQ: Why does this not run under Chrome on my iPad?\u003Cbr>\nA: Chrome lacks some features for video streaming on iPadOS\u002FiOS, try Firefox or Safari.\n\nQ: Why won't my cursor move in osu! ?\u003Cbr>\nA: Try disabling raw input.\n\nQ: Can I use Weylus even if there is no WiFi?\u003Cbr>\nA: Probably yes! Most tablets permit setting up a WiFi hotspot that can be used to connect your\ncomputer and tablet. Alternatively there is USB tethering too, which can be used to setup a peer to\npeer connection between your tablet and computer over USB. Another method for Android devices is to\nsetup a socket connection with\n[adb](https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Fcommand-line\u002Fadb#Enabling):\n```console\nadb reverse tcp:1701 tcp:1701\nadb reverse tcp:9001 tcp:9001\n```\nLike that you can connect from your Android device to Weylus with the URL: `http:\u002F\u002F127.0.0.1:1701`.\n\nWeylus only requires that your devices\nare connected via the Internet Protocol and that doesn't necessarily imply WiFi.\n\n---\n\n[![Packaging status](\nhttps:\u002F\u002Frepology.org\u002Fbadge\u002Fvertical-allrepos\u002Fweylus.svg\n)](https:\u002F\u002Frepology.org\u002Fproject\u002Fweylus\u002Fversions)\n","Weylus 是一个将你的平板或智能手机转变为电脑图形板\u002F触摸屏的工具。它支持通过Wi-Fi或USB连接，允许用户使用平板来控制鼠标、键盘输入以及屏幕镜像等功能。技术上，Weylus利用Rust语言开发，并支持硬件加速视频编码，在Linux系统下表现尤为出色，能够实现压力敏感和多点触控等高级功能。适用于需要远程操控电脑或扩展工作空间的各种场景，如远程办公、设计绘图等，尤其适合Linux用户群体。",2,"2026-06-11 03:03:48","top_language"]