Skip to content

Releases

link2linux 0.4.0

link2linux 0.4.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 27 Oct 11:35
afb00eb

Photos, screen mirroring with control, ARM64 builds and a Flatpak.

Added

  • Photos. The Photos page shows the newest 200 photos the phone's camera
    took and its screenshots. Open one to see it large and save it into your
    Pictures folder. Photos is off on the phone until you turn it on, and it
    asks for access to your photos only then; on Android 14 and later you
    can share only the photos you pick. The computer keeps thumbnails and
    photos in memory only, never on disk, until you save one.
  • Screen mirroring. The Screen page shows your phone's screen. The phone
    asks you each time before it shares, and you can stop it from either
    device. With an H.264 decoder for GStreamer installed, such as
    gstreamer1.0-libav, the video is smooth; without one it comes as a
    series of still pictures, about 12 a second.
  • Control your phone from the computer. Turn on "Allow control from your
    computer" in the phone's screen settings, and link2linux control in
    Android's accessibility settings when it asks, to
    tap, swipe, scroll and type on the phone from the Screen page, and to
    use Back, Home, Recents and the notification shade. It works only while
    you share the screen with that computer.
  • Desktop builds for 64-bit ARM computers: a .deb, an .rpm and an
    AppImage. The install script picks them by itself on an ARM computer.
  • The desktop app as a Flatpak bundle, for x86 and ARM. Install it with
    flatpak install --user ./link2linux.x86_64.flatpak, or with the install
    script's --flatpak. It runs in Flatpak's sandbox, where it can reach
    only your Downloads and Pictures folders. It keeps its own pairing, so
    pair your phone again after switching to it from a package.

Known limitations

  • Photos, screen mirroring and control have not been tried on many phones
    yet.
  • Photos lists still pictures only, not videos.
  • Screen mirroring carries no sound.
  • On Android 13 and later, Android blocks the accessibility service of an
    app installed from a file until you allow its restricted settings: open
    the app's info, then the three-dot menu, then "Allow restricted
    settings". The phone's screen settings explain how.
  • Typing into a password field from the computer works only into an empty
    field, or one holding just what you typed from the computer.
  • The Flatpak, like the AppImage, comes without the firewalld and ufw
    profiles that the .deb and .rpm install. Where a firewall blocks the
    phone's announcements, allow mDNS (UDP 5353) and UDP port 27381 yourself.

Install

Linux desktop, 64-bit x86 or ARM

Install this version in one line. It picks the .deb on Debian and Ubuntu, the
.rpm on Fedora and openSUSE, and the AppImage elsewhere, for your computer's
architecture:

curl -fsSL https://codesensei-tushar.github.io/link2linux/install.sh | L2L_VERSION=v0.4.0 sh

Or download a package below. For x86 PCs: link2linux_amd64.deb,
link2linux.x86_64.rpm, link2linux-x86_64.AppImage (which needs FUSE 2) or
link2linux.x86_64.flatpak. For ARM computers: link2linux_arm64.deb,
link2linux.aarch64.rpm, link2linux-aarch64.AppImage or
link2linux.aarch64.flatpak. Install a Flatpak bundle with
flatpak install --user ./link2linux.x86_64.flatpak; it takes the GNOME
runtime from Flathub.

Android phone, 8.0 and newer

Download link2linux.apk on the phone and open it. If Android asks, allow your
browser to install apps.

Then open link2linux on the desktop and scan the QR code it shows with the
phone.

Verify

sha256sum -c SHA256SUMS --ignore-missing
gh attestation verify link2linux_amd64.deb --repo codesensei-tushar/link2linux

What's Changed

Full Changelog: v0.3.0...v0.4.0

link2linux 0.3.0

link2linux 0.3.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 27 Oct 06:10
64ce42a

Phone status, ring my phone, and calls over Bluetooth.

Added

  • Phone status. The computer shows the phone's battery level, whether it
    is plugged in, battery saver, its mobile and Wi-Fi signal, and whether it
    is set to silent, vibrate or Do Not Disturb. The phone shares it without
    asking for any permission, and nothing in it tells where the phone is.
    Hide it in the computer's settings, or turn it off on the phone.
  • Ring my phone. "Ring phone" on the computer makes the phone ring at full
    volume for a minute, even when it is set to silent, until you stop it on
    either device. It keeps ringing if the connection drops, so you can still
    find it.
  • Calls. Take and make the phone's calls on the computer, with its
    microphone and speakers, over Bluetooth. The Calls page pairs the two
    over Bluetooth with a code you confirm on both, then shows incoming and
    ongoing calls with answer, decline, hang up and a keypad, and has a dial
    pad. An incoming call pops up on the computer, naming the caller only
    when notification text is on, and the phone's own call notification is
    shown only once. Turn calls off on the computer to keep
    them on the phone. Media audio stays on the phone.

Changed

  • Phone status, ringing and calls are on from the start on the phone,
    because they share none of your content. You can turn each one off.
    Every other feature still starts switched off.

Removed

  • The Messages placeholder pages. Replies to texts already work from their
    notifications.

Known limitations

  • Calls need PipeWire 1.4 or later with its own Bluetooth backend, as in
    Ubuntu 26.04; Ubuntu 24.04's PipeWire is too old. The Calls page says so
    where calls can't work.
  • There is no mute button during a call yet: PipeWire's call control has
    no mute.
  • Calls, phone status and ringing have not been tried on many phones and
    Bluetooth adapters yet. Some phones report less status, for example no
    network generation before Android 11.

Install

Linux desktop, 64-bit x86

Install this version in one line. It picks the .deb on Debian and Ubuntu, the
.rpm on Fedora and openSUSE, and the AppImage elsewhere:

curl -fsSL https://codesensei-tushar.github.io/link2linux/install.sh | L2L_VERSION=v0.3.0 sh

Or download a package below: link2linux_amd64.deb, link2linux.x86_64.rpm,
or link2linux-x86_64.AppImage (which needs FUSE 2).

Android phone, 8.0 and newer

Download link2linux.apk on the phone and open it. If Android asks, allow your
browser to install apps.

Then open link2linux on the desktop and scan the QR code it shows with the
phone.

Verify

sha256sum -c SHA256SUMS --ignore-missing
gh attestation verify link2linux_amd64.deb --repo codesensei-tushar/link2linux

What's Changed

Full Changelog: v0.2.0...v0.3.0

link2linux 0.2.0

link2linux 0.2.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 26 Oct 22:14
1be4c47

Clipboard sharing and file transfer between the phone and the desktop.

Added

  • Clipboard sharing. Text you copy on the computer lands on the phone's
    clipboard. The phone sends its clipboard when you ask: in the app, from a
    quick settings tile or the connection notification, or with "Copy to
    computer" in the share sheet and the text selection menu. The computer
    follows its clipboard in the background on GNOME, KDE, wlroots desktops
    and X11, and elsewhere shares when its window is focused or when you
    click Send. Passwords a password manager marks as secret stay on the
    computer unless you turn on "Share passwords". Clipboard sharing is off on
    the phone until you turn it on.
  • File transfer. Send files from the phone with "Send to computer" in the
    share sheet, which always asks first, or from its Files screen; send
    them from the computer by dragging them onto the window or with "Send
    files". Received files go to Downloads on both devices. Each file is
    checked against its SHA-256 before it is kept, a received name never
    overwrites a file, and a transfer cut off by a lost connection resumes
    where it stopped within the hour. Files are off on the phone until you
    turn them on; Android 8 and 9 also ask for storage access.

Install

Linux desktop, 64-bit x86

Install this version in one line. It picks the .deb on Debian and Ubuntu, the
.rpm on Fedora and openSUSE, and the AppImage elsewhere:

curl -fsSL https://codesensei-tushar.github.io/link2linux/install.sh | L2L_VERSION=v0.2.0 sh

Or download a package below: link2linux_amd64.deb, link2linux.x86_64.rpm,
or link2linux-x86_64.AppImage (which needs FUSE 2).

Android phone, 8.0 and newer

Download link2linux.apk on the phone and open it. If Android asks, allow your
browser to install apps.

Then open link2linux on the desktop and scan the QR code it shows with the
phone.

Verify

sha256sum -c SHA256SUMS --ignore-missing
gh attestation verify link2linux_amd64.deb --repo codesensei-tushar/link2linux

What's Changed

Full Changelog: v0.1.2...v0.2.0

link2linux 0.1.2

link2linux 0.1.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 26 Oct 18:15
0f73654

Security fixes from a review of pairing, connections and notifications on
both apps, and fixes for crashes and for the phone not keeping to its
"Stay connected" switch.

Security

None of these was known to be exploited.

  • Pairing: a forged message during a reconnect can no longer make the
    computer think the phone removed it, and the phone's real refusal is now
    recognised. Someone answering a QR code's announcement can no longer end
    it. Pairing by code no longer replaces a phone with the same id without
    asking.
  • Connections: both apps check a message's size and repeated fields
    before decoding it, and keep messages small until the other side is
    paired, so one message can no longer make either app use hundreds of
    megabytes. The computer stops reading from a peer that does not read its
    answers, keeps looking for phones after a flood of fake announcements,
    and never dials its own addresses or a public address it last saw a
    phone at.
  • Phone: its listener closes off Wi-Fi, Ethernet and hotspot networks, and
    connections that have not yet proven who they are have time and number
    limits. A removed computer is cut off before it is told. One paired
    computer can no longer lock another out with a key change.
  • Phone notifications: another app's notification icon can no longer stall
    or crash mirroring, and a computer that stops reading no longer holds up
    the others. One-time-code detection catches letter-only codes and sign-in
    links. Notification keys no longer carry contact details. A new setting,
    "Reply while this phone is locked" (on by default), lets you require an
    unlocked phone for replies and actions from a computer.
  • Computer: what the phone sends is held to the protocol's size limits;
    pictures must be a PNG, JPEG or WebP of a sensible size before they reach
    any image decoder, and their files are private to you. Pop-ups go out
    under link2linux's own name. When the app cannot tell whether the screen
    is locked, it treats it as locked, and locking takes the text off pop-ups
    still on screen. The phones' presence keys are kept sealed with a key
    from your keyring, and the pairing secret stays out of debug output.
  • Releases: the Android signing key never shares a machine with the build,
    and every workflow action is pinned to a fixed version. install.sh
    downloads over HTTPS only.

Fixed

  • The phone app no longer crashes when its camera can't start, or when the
    screen that offers to notice a nearby computer goes away.
  • With "Stay connected" off, the phone no longer opens its listener or
    restarts its connection service when a paired computer comes near, and a
    removed computer no longer wakes the app.
  • On a fresh install, the phone runs nothing in the background until the
    first pairing starts.

Install

Linux desktop, 64-bit x86

Install this version in one line. It picks the .deb on Debian and Ubuntu, the
.rpm on Fedora and openSUSE, and the AppImage elsewhere:

curl -fsSL https://codesensei-tushar.github.io/link2linux/install.sh | L2L_VERSION=v0.1.2 sh

Or download a package below: link2linux_amd64.deb, link2linux.x86_64.rpm,
or link2linux-x86_64.AppImage (which needs FUSE 2).

Android phone, 8.0 and newer

Download link2linux.apk on the phone and open it. If Android asks, allow your
browser to install apps.

Then open link2linux on the desktop and scan the QR code it shows with the
phone.

Verify

sha256sum -c SHA256SUMS --ignore-missing
gh attestation verify link2linux_amd64.deb --repo codesensei-tushar/link2linux

What's Changed

  • Point the website's downloads at 0.1.1 by @codesensei-tushar in #195
  • Keep the release signing key away from the build, and pin every action by @codesensei-tushar in #196
  • Hold what the phone sends to the protocol's limits on the desktop by @codesensei-tushar in #197
  • Keep pop-up text off a locked screen when the lock state is unknown by @codesensei-tushar in #198
  • Close the phone's listener off local networks, and bound connections before they authenticate by @codesensei-tushar in #199
  • Revoke a removed desktop before telling it, and keep pairings from claiming each other's keys by @codesensei-tushar in #200
  • Trust only the phone's own refusal of this desktop's key by @codesensei-tushar in #201
  • Keep the QR code up when someone else answers its announcement by @codesensei-tushar in #202
  • Keep another app's images and a stalled desktop from holding up the phone's notifications by @codesensei-tushar in #203
  • Seal the phones' presence keys with a key from the keyring, and keep the pairing secret out of debug output by @codesensei-tushar in #204
  • Ask the phone only for what it offers, keep replies working while it's locked, and list the security fixes by @codesensei-tushar in #205
  • Check a frame's size and repeated fields before decoding it, and stop reading from a peer that does not read by @codesensei-tushar in #206
  • Keep browsing mDNS after a flood, and bound what forged announcements make the desktop keep and dial by @codesensei-tushar in #207
  • Cap QR pairing connections, keep sealed presence keys sealed, and fix pop-up and mirror edge cases by @codesensei-tushar in #208
  • Stop the image re-render spin and one-time-code false positives, bound every icon, and keep pairing screens from crashing by @codesensei-tushar in #209
  • Free a sender stuck on a desktop that stopped reading, keep the phone to its off switch, and end pairing attempts on any error by @codesensei-tushar in #210
  • Release 0.1.2 by @codesensei-tushar in #211

Full Changelog: v0.1.1...v0.1.2

link2linux 0.1.1

link2linux 0.1.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 26 Oct 13:58
9d17fd0

Keeps more of the phone's private content to the phone, makes the desktop app
share less with other programs on the computer, and lets the computer pair and
connect over the phone's own hotspot.

Added

  • One-time codes stay on the phone. Notifications that look like they hold
    a sign-in, payment or verification code, in English or one of thirteen other
    languages, reach the computer as "One-time code hidden. Check your phone",
    with no text, pictures or actions, on every Android version. They can still
    be dismissed from the computer. "Keep one-time codes on your phone" on the
    phone's Notifications screen turns this off; it is on by default.

Fixed

  • The phone keeps listening, announcing and sending beacons while it hosts a
    Wi-Fi hotspot, or USB or Bluetooth tethering, and has no other network, so a
    computer that joins the phone's hotspot finds it.

Security

  • The desktop's private key is in the keyring. The key that identifies the
    desktop to your phones now lives in the system keyring (the Secret Service of
    GNOME Keyring, KWallet or KeePassXC) instead of a file. A key from 0.1.0 moves
    there on the first start, and its file is overwritten and deleted. Without a
    keyring, the key stays in a file only you can read, as before. If the keyring
    that holds the key is locked or not running, the app says so and offers to
    try again, rather than making a new key that your phones wouldn't know. Once
    the key has moved, 0.1.0 no longer finds it: going back to 0.1.0 means
    pairing your phones again.
  • Pop-ups hide the notification's text. Desktop pop-ups pass through the
    desktop's notification service, where other apps can read them, so a pop-up
    now only names the phone's app and says "New notification". The whole
    notification is in the link2linux window, which a click on the pop-up opens.
    The new Settings page can turn the text back on. Even then, pop-ups never
    show it while the screen is locked, and notifications the phone's app marked
    secret get no pop-up at all on a locked screen.
  • Pictures stay off the disk. Pictures that come with notifications are
    kept in your login session's runtime folder, which is cleared at logout, or
    only in memory without one. The pictures 0.1.0 saved in its data folder are
    deleted, and a phone's pictures are deleted when you unpair it.
  • The desktop app's memory is closed to other programs. Other programs you
    run can no longer attach a debugger to the app or read its memory, and it
    writes no core dumps. The window's web view runs in separate processes that
    this doesn't cover.

Install

Linux desktop, 64-bit x86

Install this version in one line. It picks the .deb on Debian and Ubuntu, the
.rpm on Fedora and openSUSE, and the AppImage elsewhere:

curl -fsSL https://codesensei-tushar.github.io/link2linux/install.sh | L2L_VERSION=v0.1.1 sh

Or download a package below: link2linux_amd64.deb, link2linux.x86_64.rpm,
or link2linux-x86_64.AppImage (which needs FUSE 2).

Android phone, 8.0 and newer

Download link2linux.apk on the phone and open it. If Android asks, allow your
browser to install apps.

Then open link2linux on the desktop and scan the QR code it shows with the
phone.

Verify

sha256sum -c SHA256SUMS --ignore-missing
gh attestation verify link2linux_amd64.deb --repo codesensei-tushar/link2linux

What's Changed

Full Changelog: v0.1.0...v0.1.1

link2linux 0.1.0

link2linux 0.1.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 26 Oct 11:24
9a2a84e

The first release: an Android phone and a Linux desktop pair once, then find
each other on the local network by themselves, and the phone's notifications
appear on the desktop.

Added

  • Pairing. Pair a phone by scanning the QR code the desktop shows. A phone
    that can't scan pairs by comparing a six-digit code on both screens instead.
  • Finding each other. Once paired, the desktop finds the phone on the local
    network through mDNS, or through the phone's own announcements where the
    network filters multicast, and reconnects by itself after the phone sleeps
    or changes networks.
  • Notifications. The phone's notifications appear on the desktop with their
    action buttons. Reply to messages from the desktop: inside the notification
    on KDE Plasma, and from the link2linux window elsewhere. Dismissing a
    notification on the desktop dismisses it on the phone too; this dismiss sync
    is on by default and can be turned off. Content that Android withholds from
    other apps, such as one-time codes, shows as hidden rather than as
    placeholder text.
  • Desktop app. Pages for pairing and notifications, and the connection
    status of each paired phone.
  • Phone app. For Android 8.0 and newer. Each feature asks for its Android
    permission only when you turn it on.
  • Downloads. A .deb, an .rpm and an AppImage for 64-bit x86 Linux, and a
    signed APK, each with a SHA-256 checksum and a build provenance attestation,
    plus a one-line installer for the desktop app.

Security

  • Everything stays on the local network: no account, no server and no relay.
  • Every connection is mutually authenticated TLS 1.3, with each device's own
    P-256 key pinned at pairing. The QR code's one-time secret and the six-digit
    code are bound to the TLS connection, so they can't be relayed to another
    device.
  • The desktop never accepts incoming connections: it dials the phone, and only
    addresses on its own local networks. The firewalld and ufw definitions that
    come with the packages open only mDNS and the beacon port, and only once you
    allow them.

Known limitations

  • Messages, calls, photos, files, the clipboard and screen mirroring are not
    in this release.
  • GNOME has no reply field inside notifications, so replies go through the
    link2linux window there.
  • There are no ARM64 builds and no Flatpak yet.

Install

Linux desktop, 64-bit x86

Install this version in one line. It picks the .deb on Debian and Ubuntu, the
.rpm on Fedora and openSUSE, and the AppImage elsewhere:

curl -fsSL https://codesensei-tushar.github.io/link2linux/install.sh | L2L_VERSION=v0.1.0 sh

Or download a package below: link2linux_amd64.deb, link2linux.x86_64.rpm,
or link2linux-x86_64.AppImage (which needs FUSE 2).

Android phone, 8.0 and newer

Download link2linux.apk on the phone and open it. If Android asks, allow your
browser to install apps.

Then open link2linux on the desktop and scan the QR code it shows with the
phone.

Verify

sha256sum -c SHA256SUMS --ignore-missing
gh attestation verify link2linux_amd64.deb --repo codesensei-tushar/link2linux

What's Changed

Read more