mirror of
https://github.com/feschber/lan-mouse.git
synced 2026-03-07 20:09:59 +03:00
Compare commits
7 Commits
up-deps
...
revert-scr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
24ce5803d5 | ||
|
|
0a0d91b0da | ||
|
|
94e6372218 | ||
|
|
39b79d88a5 | ||
|
|
5ad90ca6a5 | ||
|
|
68df27ab2c | ||
|
|
eb1dcbddb0 |
8
.github/workflows/pre-release.yml
vendored
8
.github/workflows/pre-release.yml
vendored
@@ -94,7 +94,9 @@ jobs:
|
||||
- name: Install cargo bundle
|
||||
run: cargo install cargo-bundle
|
||||
- name: Bundle
|
||||
run: cargo bundle --release
|
||||
run: |
|
||||
cargo bundle --release
|
||||
scripts/copy-macos-dylib.sh "target/release/bundle/osx/Lan Mouse.app/Contents/MacOS/lan-mouse"
|
||||
- name: Zip bundle
|
||||
run: |
|
||||
cd target/release/bundle/osx
|
||||
@@ -120,7 +122,9 @@ jobs:
|
||||
- name: Install cargo bundle
|
||||
run: cargo install cargo-bundle
|
||||
- name: Bundle
|
||||
run: cargo bundle --release
|
||||
run: |
|
||||
cargo bundle --release
|
||||
scripts/copy-macos-dylib.sh "target/release/bundle/osx/Lan Mouse.app/Contents/MacOS/lan-mouse"
|
||||
- name: Zip bundle
|
||||
run: |
|
||||
cd target/release/bundle/osx
|
||||
|
||||
8
.github/workflows/rust.yml
vendored
8
.github/workflows/rust.yml
vendored
@@ -112,7 +112,9 @@ jobs:
|
||||
- name: Install cargo bundle
|
||||
run: cargo install cargo-bundle
|
||||
- name: Bundle
|
||||
run: cargo bundle
|
||||
run: |
|
||||
cargo bundle
|
||||
scripts/copy-macos-dylib.sh
|
||||
- name: Zip bundle
|
||||
run: |
|
||||
cd target/debug/bundle/osx
|
||||
@@ -142,7 +144,9 @@ jobs:
|
||||
- name: Install cargo bundle
|
||||
run: cargo install cargo-bundle
|
||||
- name: Bundle
|
||||
run: cargo bundle
|
||||
run: |
|
||||
cargo bundle
|
||||
scripts/copy-macos-dylib.sh
|
||||
- name: Zip bundle
|
||||
run: |
|
||||
cd target/debug/bundle/osx
|
||||
|
||||
8
.github/workflows/tagged-release.yml
vendored
8
.github/workflows/tagged-release.yml
vendored
@@ -90,7 +90,9 @@ jobs:
|
||||
- name: Install cargo bundle
|
||||
run: cargo install cargo-bundle
|
||||
- name: Bundle
|
||||
run: cargo bundle --release
|
||||
run: |
|
||||
cargo bundle --release
|
||||
scripts/copy-macos-dylib.sh "target/release/bundle/osx/Lan Mouse.app/Contents/MacOS/lan-mouse"
|
||||
- name: Zip bundle
|
||||
run: |
|
||||
cd target/release/bundle/osx
|
||||
@@ -116,7 +118,9 @@ jobs:
|
||||
- name: Install cargo bundle
|
||||
run: cargo install cargo-bundle
|
||||
- name: Bundle
|
||||
run: cargo bundle --release
|
||||
run: |
|
||||
cargo bundle --release
|
||||
scripts/copy-macos-dylib.sh "target/release/bundle/osx/Lan Mouse.app/Contents/MacOS/lan-mouse"
|
||||
- name: Zip bundle
|
||||
run: |
|
||||
cd target/release/bundle/osx
|
||||
|
||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -8,3 +8,7 @@ result
|
||||
*.pem
|
||||
*.csr
|
||||
extfile.conf
|
||||
|
||||
# flatpak files
|
||||
.flatpak-builder
|
||||
repo
|
||||
|
||||
36
README.md
36
README.md
@@ -81,15 +81,37 @@ paru -S lan-mouse-git
|
||||
- flake: [README.md](./nix/README.md)
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Fedora</summary>
|
||||
You can install Lan Mouse from the [Terra Repository](https://terra.fyralabs.com).
|
||||
|
||||
|
||||
After enabling Terra:
|
||||
|
||||
```sh
|
||||
dnf install lan-mouse
|
||||
```
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>MacOS</summary>
|
||||
|
||||
- Download the package for your Mac (Intel or ARM) from the releases page
|
||||
- Unzip it
|
||||
- Remove the quarantine with `xattr -rd com.apple.quarantine "Lan Mouse.app"`
|
||||
- Launch the app
|
||||
- Grant accessibility permissions in System Preferences
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Manual Installation</summary>
|
||||
|
||||
First make sure to [install the necessary dependencies](#installing-dependencies).
|
||||
First make sure to [install the necessary dependencies](#installing-dependencies-for-development--compiling-from-source).
|
||||
|
||||
Precompiled release binaries for Windows, MacOS and Linux are available in the [releases section](https://github.com/feschber/lan-mouse/releases).
|
||||
For Windows, the depenedencies are included in the .zip file, for other operating systems see [Installing Dependencies](#installing-dependencies).
|
||||
For Windows, the depenedencies are included in the .zip file, for other operating systems see [Installing Dependencies](#installing-dependencies-for-development--compiling-from-source).
|
||||
|
||||
Alternatively, the `lan-mouse` binary can be compiled from source (see below).
|
||||
|
||||
@@ -161,7 +183,15 @@ For a detailed list of available features, checkout the [Cargo.toml](./Cargo.tom
|
||||
<summary>MacOS</summary>
|
||||
|
||||
```sh
|
||||
brew install libadwaita pkg-config
|
||||
# Install dependencies
|
||||
brew install libadwaita pkg-config imagemagick
|
||||
cargo install cargo-bundle
|
||||
# Create the macOS icon file
|
||||
scripts/makeicns.sh
|
||||
# Create the .app bundle
|
||||
cargo bundle
|
||||
# Copy all dynamic libraries into the bundle, and update the bundle to find them there
|
||||
scripts/copy-macos-dylib.sh
|
||||
```
|
||||
</details>
|
||||
|
||||
|
||||
50
build-aux/de.feschber.LanMouse.yml
Normal file
50
build-aux/de.feschber.LanMouse.yml
Normal file
@@ -0,0 +1,50 @@
|
||||
# yaml-language-server: $schema=https://raw.githubusercontent.com/flatpak/flatpak-builder/refs/heads/main/data/flatpak-manifest.schema.json
|
||||
app-id: de.feschber.LanMouse
|
||||
runtime: org.gnome.Platform
|
||||
runtime-version: "48"
|
||||
sdk: org.gnome.Sdk
|
||||
sdk-extensions:
|
||||
- org.freedesktop.Sdk.Extension.rust-stable
|
||||
- org.freedesktop.Sdk.Extension.llvm20
|
||||
command: /app/bin/lan-mouse
|
||||
build-options:
|
||||
append-path: "/usr/lib/sdk/rust-stable/bin:/usr/lib/sdk/llvm20/bin"
|
||||
env:
|
||||
"CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER": "clang"
|
||||
"CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS": "-C link-arg=-fuse-ld=/usr/lib/sdk/rust-stable/bin/mold"
|
||||
"CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER": "clang"
|
||||
"CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS": "-C link-arg=-fuse-ld=/usr/lib/sdk/rust-stable/bin/mold"
|
||||
build-args:
|
||||
"--share=network"
|
||||
prepend-ld-library-path:
|
||||
"/usr/lib/sdk/llvm19/lib"
|
||||
|
||||
finish-args:
|
||||
- "--socket=wayland"
|
||||
- "--socket=fallback-x11"
|
||||
- "--device=dri"
|
||||
- "--socket=session-bus"
|
||||
- "--share=network"
|
||||
- "--filesystem=xdg-config"
|
||||
- "--env=RUST_BACKTRACE=1"
|
||||
- "--env=RUST_LOG=lan-mouse=debug"
|
||||
- "--env=GTK_PATH=/app/lib/gtk-4.0"
|
||||
|
||||
modules:
|
||||
- name: lan-mouse
|
||||
buildsystem: simple
|
||||
build-options:
|
||||
build-args:
|
||||
- "--share=network"
|
||||
append-path: /usr/lib/sdk/rust-stable/bin
|
||||
env:
|
||||
CARGO_HOME: /run/build/lan-mouse/cargo
|
||||
build-commands:
|
||||
- cargo fetch --manifest-path Cargo.toml --verbose
|
||||
- cargo build
|
||||
- install -Dm0755 target/debug/lan-mouse /app/bin/lan-mouse
|
||||
- install -Dm0644 lan-mouse-gtk/resources/de.feschber.LanMouse.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/${FLATPAK_ID}.svg
|
||||
- install -Dm0644 de.feschber.LanMouse.desktop ${FLATPAK_DEST}/share/applications/${FLATPAK_ID}.desktop
|
||||
sources:
|
||||
- type: dir
|
||||
path: ..
|
||||
@@ -1,14 +0,0 @@
|
||||
app-id: de.feschber.LanMouse
|
||||
runtime: org.freedesktop.Platform
|
||||
runtime-version: '22.08'
|
||||
sdk: org.freedesktop.Sdk
|
||||
command: target/release/lan-mouse
|
||||
modules:
|
||||
- name: hello
|
||||
buildsystem: simple
|
||||
build-commands:
|
||||
- cargo build --release
|
||||
- install -D lan-mouse /app/bin/lan-mouse
|
||||
sources:
|
||||
- type: file
|
||||
path: target/release/lan-mouse
|
||||
1
dylibs/.gitignore
vendored
Normal file
1
dylibs/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*
|
||||
@@ -12,7 +12,7 @@ use wayland_client::backend::WaylandError;
|
||||
use wayland_client::WEnum;
|
||||
|
||||
use wayland_client::protocol::wl_keyboard::{self, WlKeyboard};
|
||||
use wayland_client::protocol::wl_pointer::{Axis, ButtonState};
|
||||
use wayland_client::protocol::wl_pointer::{Axis, AxisSource, ButtonState};
|
||||
use wayland_client::protocol::wl_seat::WlSeat;
|
||||
use wayland_protocols_wlr::virtual_pointer::v1::client::{
|
||||
zwlr_virtual_pointer_manager_v1::ZwlrVirtualPointerManagerV1 as VpManager,
|
||||
@@ -210,7 +210,8 @@ impl VirtualInput {
|
||||
PointerEvent::AxisDiscrete120 { axis, value } => {
|
||||
let axis: Axis = (axis as u32).try_into()?;
|
||||
self.pointer
|
||||
.axis_discrete(now, axis, value as f64 / 6., value / 120);
|
||||
.axis_discrete(now, axis, value as f64 / 8., value / 120);
|
||||
self.pointer.axis_source(AxisSource::Wheel);
|
||||
self.pointer.frame();
|
||||
}
|
||||
}
|
||||
|
||||
93
scripts/copy-macos-dylib.sh
Executable file
93
scripts/copy-macos-dylib.sh
Executable file
@@ -0,0 +1,93 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
homebrew_path=""
|
||||
exec_path="target/debug/bundle/osx/Lan Mouse.app/Contents/MacOS/lan-mouse"
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
$0: Copy all Homebrew libraries into the macOS app bundle.
|
||||
USAGE: $0 [-h] [-b homebrew_path] [exec_path]
|
||||
|
||||
OPTIONS:
|
||||
-h, --help Show this help message and exit
|
||||
-b Path to Homebrew installation (default: $homebrew_path)
|
||||
exec_path Path to the main executable in the app bundle
|
||||
(default: get from `brew --prefix`)
|
||||
|
||||
When macOS apps are linked to dynamic libraries (.dylib files),
|
||||
the fully qualified path to the library is embedded in the binary.
|
||||
If the libraries come from Homebrew, that means that Homebrew must be present
|
||||
and the libraries must be installed in the same location on the user's machine.
|
||||
|
||||
This script copies all of the Homebrew libraries that an executable links to into the app bundle
|
||||
and tells all the binaries in the bundle to look for them there.
|
||||
EOF
|
||||
}
|
||||
|
||||
# Gather command-line arguments
|
||||
while test $# -gt 0; do
|
||||
case "$1" in
|
||||
-h | --help ) usage; exit 0;;
|
||||
-b | --homebrew ) homebrew_path="$1"; shift 2;;
|
||||
* ) exec_path="$1"; shift;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "$homebrew_path" ]; then
|
||||
homebrew_path="$(brew --prefix)"
|
||||
fi
|
||||
|
||||
# Path to the .app bundle
|
||||
bundle_path=$(dirname "$(dirname "$(dirname "$exec_path")")")
|
||||
# Path to the Frameworks directory
|
||||
fwks_path="$bundle_path/Contents/Frameworks"
|
||||
mkdir -p "$fwks_path"
|
||||
|
||||
# Copy and fix references for a binary (executable or dylib)
|
||||
#
|
||||
# This function will:
|
||||
# - Copy any referenced dylibs from /opt/homebrew to the Frameworks directory
|
||||
# - Update the binary to reference the local copy instead
|
||||
# - Add the Frameworks directory to the binary's RPATH
|
||||
# - Recursively process the copied dylibs
|
||||
fix_references() {
|
||||
local bin="$1"
|
||||
|
||||
# Get all Homebrew libraries referenced by the binary
|
||||
libs=$(otool -L "$bin" | awk -v homebrew="$homebrew_path" '$0 ~ homebrew {print $1}')
|
||||
|
||||
echo "$libs" | while IFS= read -r old_path; do
|
||||
local base_name="$(basename "$old_path")"
|
||||
local dest="$fwks_path/$base_name"
|
||||
|
||||
if [ ! -e "$dest" ]; then
|
||||
echo "Copying $old_path -> $dest"
|
||||
cp -f "$old_path" "$dest"
|
||||
# Ensure the copied dylib is writable so that xattr -rd /path/to/Lan\ Mouse.app works.
|
||||
chmod 644 "$dest"
|
||||
|
||||
echo "Updating $dest to have install_name of @rpath/$base_name..."
|
||||
install_name_tool -id "@rpath/$base_name" "$dest"
|
||||
|
||||
# Recursively process this dylib
|
||||
fix_references "$dest"
|
||||
fi
|
||||
|
||||
echo "Updating $bin to reference @rpath/$base_name..."
|
||||
install_name_tool -change "$old_path" "@rpath/$base_name" "$bin"
|
||||
done
|
||||
}
|
||||
|
||||
fix_references "$exec_path"
|
||||
|
||||
# Ensure the main executable has our Frameworks path in its RPATH
|
||||
if ! otool -l "$exec_path" | grep -q "@executable_path/../Frameworks"; then
|
||||
echo "Adding RPATH to $exec_path"
|
||||
install_name_tool -add_rpath "@executable_path/../Frameworks" "$exec_path"
|
||||
fi
|
||||
|
||||
# Se-sign the .app
|
||||
codesign --force --deep --sign - "$bundle_path"
|
||||
|
||||
echo "Done!"
|
||||
Reference in New Issue
Block a user