{"id":178,"date":"2026-10-07T14:40:40","date_gmt":"2026-10-07T12:40:40","guid":{"rendered":"https:\/\/linuxundich.de\/en\/?p=178"},"modified":"2026-10-08T03:22:10","modified_gmt":"2026-10-08T01:22:10","slug":"scrcpy-5-hardware-decoding-arch-linux-aurynk","status":"publish","type":"post","link":"https:\/\/linuxundich.de\/en\/scrcpy-5-hardware-decoding-arch-linux-aurynk\/","title":{"rendered":"scrcpy 5.0 mirrors Android with hardware decoding \u2013 now in Arch Linux"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">If you want to mirror your Android phone on a Linux desktop, you sooner or later end up at scrcpy. The free program from Genymobile shows the phone screen in a window and lets you control it with your mouse and keyboard, no root required. Version 5.0 has been out since October 5, and it brings a feature many people have been waiting for: hardware decoding.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Until now, the CPU unpacked the entire video stream from the phone. With scrcpy 5.0, the GPU takes over, on Linux via VA-API. The change only affects the computer side, not the phone. The <a href=\"https:\/\/github.com\/Genymobile\/scrcpy\/releases\/tag\/v5.0\">scrcpy 5.0 release notes<\/a> promise ten times less CPU load. <a href=\"https:\/\/www.omgubuntu.co.uk\/2026\/10\/scrcpy-hardware-decoding-added\">OMG! Ubuntu<\/a> has covered the release as well, and there is a thread about it in the r\/Android subreddit on <a href=\"https:\/\/www.reddit.com\/r\/Android\/comments\/1wym91l\/scrcpy_50_now_supports_hardware_decoding_better\/\">Reddit<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hardware decoding is active out of the box, no extra switch needed. scrcpy picks the first suitable decoder itself and falls back to software otherwise. If you want to step in, the <a href=\"https:\/\/github.com\/Genymobile\/scrcpy\/blob\/master\/doc\/video.md#hardware-decoding\">documentation<\/a> points you to <code>--hwdec<\/code>, for example with <code>auto<\/code>, <code>vaapi<\/code> or <code>disabled<\/code>. There are also a few smaller changes: audio capture mode now grabs all sources, <code>ANDROID_SERIAL<\/code> works in OTG mode, and Shift and AltGr no longer get lost in UHID mode.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Windows users get native ARM64 builds for the first time. That does not matter on Linux, where the graphics side counts. On my machine, scrcpy 5.0 just arrived as an update on my Arch notebook, a quick <code>sudo pacman -Syu<\/code> is all it takes. If you have not installed the program yet, grab the <a href=\"https:\/\/archlinux.org\/packages\/extra\/x86_64\/scrcpy\/\">scrcpy package from Arch Linux<\/a> with <code>sudo pacman -S scrcpy<\/code>. The source code lives in the <a href=\"https:\/\/github.com\/Genymobile\/scrcpy\">scrcpy GitHub repository<\/a>.<\/p>\n\n\n<section class=\"lui-facts wp-block-lui-app-facts\" aria-label=\"Fact sheet: scrcpy\" data-lui-facts>\n\t<div class=\"lui-facts-head\">\n\t\t<span class=\"lui-facts-icon\" aria-hidden=\"true\">S<\/span>\n\t\t<div>\n\t\t\t<p class=\"lui-facts-name\">scrcpy<\/p>\n\t\t\t\t\t\t\t<p class=\"lui-facts-tagline\">Mirrors Android devices to the Linux desktop over USB or Wi-Fi and lets you control them with mouse and keyboard \u2013 no root needed.<\/p>\n\t\t\t\t\t<\/div>\n\t<\/div>\n\t\t\t<dl class=\"lui-facts-list\">\n\t\t\t\t\t\t\t<dt>Version<\/dt>\n\t\t\t\t<dd>5.0<\/dd>\n\t\t\t\t\t\t\t<dt>License<\/dt>\n\t\t\t\t<dd>Apache-2.0<\/dd>\n\t\t\t\t\t\t\t<dt>Tested with<\/dt>\n\t\t\t\t<dd>Arch Linux, Pixel 10 with Android 17, Intel Iris Xe<\/dd>\n\t\t\t\t\t\t\t<dt>Project<\/dt>\n\t\t\t\t<dd><a href=\"https:\/\/github.com\/Genymobile\/scrcpy\">Source code<\/a><\/dd>\n\t\t\t\t\t<\/dl>\n\t\t\t\t<div class=\"lui-facts-install\">\n\t\t\t<p class=\"lui-facts-install-title\">Installation<\/p>\n\t\t\t\t\t\t\t<div class=\"lui-facts-cmd\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"lui-facts-cmd-label\">Arch Linux<\/span>\n\t\t\t\t\t\t\t\t\t\t<code>sudo pacman -S scrcpy<\/code>\n\t\t\t\t\t<button type=\"button\" class=\"lui-facts-copy\" data-lui-facts-copy hidden>Copy<\/button>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<script type=\"application\/ld+json\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"SoftwareApplication\",\"name\":\"scrcpy\",\"description\":\"Mirrors Android devices to the Linux desktop over USB or Wi-Fi and lets you control them with mouse and keyboard \u2013 no root needed.\",\"softwareVersion\":\"5.0\",\"license\":\"Apache-2.0\",\"operatingSystem\":\"Linux\",\"applicationCategory\":\"UtilitiesApplication\"}<\/script>\n<\/section>\n\n\n\n<h2 class=\"wp-block-heading\">Does hardware decoding really work?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For VA-API to have anything to do, you need a matching driver on your computer. On Intel that is <code>intel-media-driver<\/code>, on AMD Mesa is enough. What the ArchWiki says about <a href=\"https:\/\/wiki.archlinux.org\/title\/Hardware_video_acceleration\">hardware video acceleration<\/a> applies one to one here, and the driver details are explained there. My machine has an Intel Iris Xe, and at startup scrcpy dutifully reports that it uses VA-API:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>INFO: Interop: vaapi\nINFO: Video decoding: vaapi\nINFO: Texture (VA-API): 1080x2424<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I wanted to know more and connected the Pixel 10 via USB. While scrcpy was running, I scrolled the screen up and down six times and measured the CPU time used by the scrcpy process. With <code>--hwdec=disabled<\/code> it was about 2.9 seconds, with <code>--hwdec=auto<\/code> only 0.37 seconds. That is roughly a factor of eight. I ran the test twice with the same result, and the stream was capped at 60 FPS.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Aurynk: scrcpy with a graphical interface<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you do not like typing command-line parameters, <a href=\"https:\/\/flathub.org\/en\/apps\/io.github.IshuSinghSE.aurynk\">Aurynk<\/a> offers a pretty interface. The GTK4 app with its libadwaita look (source code on <a href=\"https:\/\/github.com\/IshuSinghSE\/Aurynk\">GitHub<\/a>) pairs Android devices via wireless debugging, shows technical details and starts scrcpy at the push of a button. It is available on Flathub, and installation works the usual way:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ flatpak install flathub io.github.IshuSinghSE.aurynk<\/code><\/pre>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6acef5b853f6c&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6acef5b853f6c\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" height=\"720\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" srcset=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-geraeteliste-640x360.webp 640w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-geraeteliste-768x432.webp 768w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-geraeteliste.webp 1280w\" width=\"1280\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-geraeteliste.webp\" alt=\"Screenshot: Aurynk window with the list of paired devices, showing a Pixel 10 (frankel) running Android 17\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Aurynk&#8217;s main window lists the paired Pixel 10 with the Disconnect and Mirror buttons.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To pair, open the developer options on your phone and turn on <a href=\"https:\/\/developer.android.com\/tools\/adb\">wireless debugging<\/a>. Aurynk offers two ways to connect: a QR code that you scan with your phone, or entering the IP address, port and six-digit pairing code by hand. I went with the manual route. Afterwards, Aurynk shows the name, Android version, RAM, storage and battery level of the device.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6acef5b85438a&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6acef5b85438a\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" height=\"720\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" srcset=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-pairing-qr-640x360.webp 640w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-pairing-qr-768x432.webp 768w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-pairing-qr.webp 1280w\" width=\"1280\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-pairing-qr.webp\" alt=\"Screenshot: Aurynk's Pair New Device dialog with a QR code and the QR Code and Manual tabs\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">The pairing dialog shows a QR code that your phone scans under Developer options and Wireless debugging.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">It did not go entirely smoothly for me, though. After pairing, Aurynk reported that it could not find the connection port automatically and did not show the device. A workaround helped: I first set up the connection to the phone with <code>adb connect<\/code> and then paired again in Aurynk with a fresh code. After that, the Pixel showed up in the list.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6acef5b854792&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6acef5b854792\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" height=\"720\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" srcset=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-geraete-details-640x360.webp 640w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-geraete-details-768x432.webp 768w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-geraete-details.webp 1280w\" width=\"1280\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-geraete-details.webp\" alt=\"Screenshot: Aurynk's Device frankel window with basic information and specifications of the Pixel 10\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Aurynk&#8217;s detail view shows the manufacturer, Android version, IP address, 12 GB of RAM, 115 GB of storage and 72 percent battery.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">One catch remains: the Flatpak ships its own scrcpy, and that is version 3.3.3. So Aurynk does not benefit from the new hardware decoding for now. That will change as soon as the developer updates the package. If you want to use 5.0 right away, start scrcpy from the Arch package directly in the terminal. The mirroring itself works flawlessly in Aurynk anyway.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6acef5b854ba0&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6acef5b854ba0\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" height=\"720\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" srcset=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-mirror-pixel-640x360.webp 640w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-mirror-pixel-768x432.webp 768w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-mirror-pixel-1280x720.webp 1280w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-mirror-pixel-1536x864.webp 1536w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-mirror-pixel.webp 1600w\" width=\"1280\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/aurynk-mirror-pixel-1280x720.webp\" alt=\"Screenshot: scrcpy window with the phone screen, showing the linuxundich.de start page open in the browser\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">The mirrored Pixel 10 shows the Linux und Ich start page, with the Aurynk window behind it.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Desktop mode: multitasking on the Pixel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">With <code>--new-display<\/code>, scrcpy creates a virtual display on the phone and shows it as its own window. I tried <code>scrcpy --new-display=1920x1080\/160<\/code> on the Pixel 10 running Android 17. The result is a desktop with a taskbar. Apps only open there as windows if you start them with <code>adb shell am start --display 37 --windowingMode 5<\/code>. The 37 is the ID that scrcpy reports at startup.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6acef5b854f7a&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6acef5b854f7a\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" height=\"720\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" srcset=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/scrcpy-multitasking-640x360.webp 640w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/scrcpy-multitasking-768x432.webp 768w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/scrcpy-multitasking-1280x720.webp 1280w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/scrcpy-multitasking-1536x864.webp 1536w, https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/scrcpy-multitasking.webp 1600w\" width=\"1280\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2026\/10\/scrcpy-multitasking-1280x720.webp\" alt=\"Screenshot: scrcpy window in the Pixel 10's desktop mode with four apps open at the same time in separate windows\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">On the virtual display, Firefox with Linux und Ich, the calculator, the stopwatch and Chrome with the scrcpy repository run side by side in freely arranged windows.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Inside the window, a browser, calculator and stopwatch now run next to each other, freely movable like on a normal desktop. Multiple screens work too: a second scrcpy instance got its own virtual display, and both ran in parallel. The windows did start out in phone portrait format, though, so I resized them with <code>am task resize<\/code>. It does not work entirely without fiddling around.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A few tips from the <a href=\"https:\/\/www.reddit.com\/r\/Android\/comments\/1wym91l\/scrcpy_50_now_supports_hardware_decoding_better\/\">Reddit discussion<\/a> are worth a look as well: <code>--turn-screen-off<\/code> switches off the phone display, <code>--stay-awake<\/code> keeps it awake so the phone does not lock and drop the connection, and <code>--video-codec=h265<\/code> uses the more efficient codec. On my machine, the CPU time with H.265 and hardware decoding was 0.39 seconds, without it 3.5 seconds. Commenters even use scrcpy to rescue data from a phone with a broken touchscreen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One catch came up several times in the discussion: with developer options enabled, some banking apps refuse to work. One commenter writes that Android 17 QPR1 prevents this check on Pixel devices. I have not tested that. Others use the Geto app, which switches off developer options per app, but that breaks the ADB connection. If you need this, test it with your own banking app first.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By the way, controlling a smartphone from the desktop is no new trick. Back in <a href=\"https:\/\/linuxundich.de\/android-smartphones-desktop-bedienen-screencast\/\">2010 I used a Java program from the xda forum for it<\/a> (in German), and in 2014 android-scrot took <a href=\"https:\/\/linuxundich.de\/android-scrot-schiesst-screenshots-per-adb-vom-terminal-aus\/\">screenshots via adb from the terminal<\/a> (in German). If you treat your Android device as half a Linux computer anyway, I also recommend the <a href=\"https:\/\/linuxundich.de\/die-neue-linux-vm-fuer-android-ein-ueberblick\/\">overview of the new Linux VM for Android<\/a> (in German).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">My take: if you use scrcpy on Arch, check the startup message once after the update. If it says \u201cVideo decoding: vaapi\u201d, CPU load drops noticeably, which is good for the battery, especially on notebooks. Aurynk is a nice helper for everyone who does not like typing in the terminal. Do you mirror your phone with scrcpy or with another solution?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>scrcpy 5.0 finally decodes the video stream from your Android phone on the GPU. The package has already landed in Arch Linux \u2013 I measured the difference and added Aurynk from Flathub as a graphical front end.<\/p>\n","protected":false},"author":2,"featured_media":179,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"lui_source_id":47958,"lui_source_hash":"","lui_source_translated":"2026-10-08","lui_source_reviewed":true,"lui_via_url":"","lui_via_label":"","lui_source_url":"","lui_source_label":"","footnotes":""},"categories":[2],"tags":[19,20,18],"class_list":["post-178","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gnu-linux","tag-android","tag-aurynk","tag-scrcpy"],"_links":{"self":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/posts\/178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/comments?post=178"}],"version-history":[{"count":2,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/posts\/178\/revisions"}],"predecessor-version":[{"id":183,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/posts\/178\/revisions\/183"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/media\/179"}],"wp:attachment":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/media?parent=178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/categories?post=178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/tags?post=178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}