Repository navigation
Expand file tree
/
Copy pathREADME.txt
More file actions
412 lines (372 loc) · 25.9 KB
/
Copy pathREADME.txt
File metadata and controls
412 lines (372 loc) · 25.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
Jiffshot for Linux x64 and ARM64
===============================
The packages use Rustolonia's static host and do not bundle companion
Rustolonia, SkiaSharp, or HarfBuzzSharp libraries. They do not bundle system
libraries or codecs. No .NET SDK is required to run the application.
The release tar.gz and Debian package are built on Ubuntu 24.04 and target
Ubuntu 24.04. The RPM is built separately on Fedora 43 and targets Fedora 43.
Packages built elsewhere inherit that build distro's ELF ABI requirements.
In particular, do not repackage an Ubuntu binary as a Fedora RPM: their
Leptonica libraries have different SONAMEs. Build natively for each target.
Both x64 and ARM64 are configured for all three formats; other architectures and
older distributions are not currently supported. Rustolonia v12.1.5 publishes
linux-x64 and linux-arm64 runtime host assets. Host asset availability alone
does not validate an application build: native CI must build, test and package
the complete packages on each architecture.
The GUI requires an X11 display or XWayland. The current Rustolonia host
does not support a Wayland-only session without XWayland.
Portable tar.gz:
Extract the matching archive and run ./jiffshot-VERSION-linux-ARCH/bin/jiffshot,
where ARCH is x64 or arm64.
The directory can be relocated, including to paths containing spaces.
Add its bin directory to PATH to use "jiffshot" from a terminal.
Desktop and MIME files are included but are not installed automatically.
Debian / Ubuntu:
sudo apt install ./jiffshot_VERSION_amd64.deb
On ARM64 use ./jiffshot_VERSION_arm64.deb instead.
Start Jiffshot from the application menu or run "jiffshot [image-video-or-jsd]".
sudo apt remove jiffshot
Fedora:
sudo dnf install ./jiffshot-VERSION-1.x86_64.rpm
On ARM64 use ./jiffshot-VERSION-1.aarch64.rpm instead.
Start Jiffshot from the application menu or run "jiffshot [image-video-or-jsd]".
sudo dnf remove jiffshot
H.264 recording and some import formats need extra codec plugins.
Enable RPM Fusion Free for Fedora 43 and Fedora's Cisco OpenH264 repository,
install gstreamer1-plugins-ugly and gstreamer1-plugins-bad-freeworld, and use
gstreamer1-plugin-libav with RPM Fusion's full FFmpeg build (see below).
The required GStreamer elements are x264enc, h264parse, mp4mux, aacparse,
audiomixer, pipewiresrc, pulsesrc, and either voaacenc or fdkaacenc.
Missing elements and AAC encoder creation errors are reported in the UI.
Fedora 43's GStreamer 1.26 release/update packages do not supply voaacenc;
they supply fdkaacenc in gstreamer1-plugins-bad-free instead. Recording, video
editing and media fixtures share capability selection: voaacenc is preferred
when present, otherwise fdkaacenc is used. A present encoder that fails to
create is reported, not silently replaced. Both use 128 kbit/s AAC-LC with raw
framing through aacparse into MP4; upstream conversion/resampling negotiates
interleaved S16LE audio. No encoder alias or test skip is provided.
Recording and exports count the actual 48 kHz stereo source samples and
finalize MP4 presentation edits after EOS. The edit excludes AAC-LC priming
(FDK: 2048 samples; VisualOn: 1600 samples) and terminal codec padding without
discarding compressed packets or moving video timestamps/chunk offsets.
VisualOn's non-draining wrapper receives complete padded frames at EOS so
the real source tail is encoded; that padding is not audible. A continuous
encoder input segment avoids resets between concatenated source intervals.
Editing uses presentation/stream time, not priming-offset media timestamps.
Invalid or unsupported timing metadata fails explicitly. Native media tests
verify decoded sample counts, tone boundaries/tails and repeated-edit sync,
not just installed factory names or padded elementary-AAC frame counts.
Run "jiffshot --capture", "--capture-interactive", "--grab-text", "--scrolling",
"--scrolling-horizontal", "--panoramic", "--interval", or "--record" to start an action
directly. Scrolling and panning are manual, --interval uses saved preferences, and --record
starts without audio. Capture, screen text, scrolling, panoramic, interval capture and recording
are also offered as application actions by supporting desktops. Use
"jiffshot --help" for the Linux CLI.
Portable runtime dependencies on Ubuntu 24.04:
sudo apt install libgstreamer1.0-0 libgstreamer-plugins-base1.0-0 \
libtesseract5 liblept5 libfontconfig1 libice6 libsm6 libx11-6 \
libxcursor1 libxi6 libxrandr2 libgtk-3-0t64 libicu74 libssl3t64 fonts-dejavu-core \
tesseract-ocr-eng gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-pipewire \
gstreamer1.0-pulseaudio
(The native .deb resolves its exact ELF dependencies automatically.)
File and folder choosers use the XDG FileChooser portal when available.
If that portal is unavailable, the app falls back to the native GTK picker;
other portal errors are reported rather than silently treated as cancellation.
Screen capture and recording require a working XDG ScreenCast portal,
PipeWire, and a graphical desktop. System-sound and microphone recording need
a PulseAudio-compatible sound server; system sound uses the default output's
monitor. An optional rectangular or circular webcam overlay uses a raw-video
V4L2 camera accessible to the user. The webcam preferences in the scrollable
controls select the device path, corner, shape and size (10-50 percent); choose
"Save webcam preferences" before recording. Circle size is a percentage of the
recording height, capped by its width. The default is a rectangle from
/dev/video0 at 25 percent in the bottom-right corner. WSLg without these
portals can run the editor, but cannot validate real screen capture/recording.
Use "Pause/resume recording" to omit a section from a recording, then use a
recording action again to stop and save, including while paused. The capture
session and selected audio and webcam devices stay active while paused.
"Restart recording" discards the current video and starts again with the same
source and devices; "Cancel recording" discards it. Stop or cancel during the
portal chooser closes the request without saving a video.
Set "Recording frame rate" to Source (the default), 15, 24, 30, or 60 fps
and choose "Save recording frame rate" to apply it to new recordings, including
command-line and global-shortcut starts. Restart retains the rate chosen when
the recording began. Fixed rates may drop or duplicate frames and cannot
increase the source's actual temporal detail.
The "Desktop screenshot chooser" uses the desktop's XDG Screenshot portal.
Its available selection modes may include a rectangular area, window or
screen, depending on the desktop. Cancelling saves nothing. If the editor
changes while a capture is pending, the captured image is saved and copied
when enabled but does not replace newer editor changes.
"Grab text..." or --grab-text uses the desktop Screenshot chooser and English
Tesseract data to recognize the selected image and copy text to the clipboard.
It does not replace the editor or save a Jiffshot capture. Cancellation,
unrecognized text or errors leave the clipboard unchanged; review OCR results.
For timed screen or window capture, set "Screen capture delay (seconds)" to
1-60 and choose "Save capture delay". The countdown starts after source
selection, allowing time to open the content to capture. "Cancel delayed
capture" stops it without saving; close the desktop chooser too if it is still
open. Zero captures immediately. This setting also applies to --capture and
the global capture shortcut, but not to the desktop screenshot chooser,
scrolling capture, interval capture, daily capture or recording.
Enable "Screen presets" to save named screen/window captures with their own
delay and cursor choices. Enter a name and options, then choose "Save screen
preset"; saving the same name replaces it. Choose the preset's "Capture" button
to run it, or enter its name and choose "Delete screen preset". A preset still
requests a desktop source and does not change the normal capture preferences.
Names are case-sensitive and limited to 128 UTF-8 bytes. Presets for other
capture modes are not currently available.
"Include cursor in captures" and "Include cursor in recordings" control the
pointer independently for screen, interval and daily captures and recordings. Choose
"Save cursor preferences" to apply them; both default to included, subject to
desktop portal and compositor support. Scrolling and panoramic capture request a hidden cursor,
while the desktop screenshot chooser controls its own cursor behavior.
Manual scrolling capture uses the portal-selected source. Check "Horizontal
scrolling" before starting to scroll right; leave it unchecked to scroll down.
Scroll slowly while retaining overlap between views, and use the same control
to finish or "Cancel scrolling" to discard it. It reports lost overlap and
finishes the last complete image when its size limit is reached. Automatic
scrolling is not implemented.
"Panoramic capture... (start/finish)" or --panoramic selects a screen or window
and lets you pan slowly in any direction while keeping the views overlapping.
Choose the same control to finish, or "Cancel scrolling" to discard it.
Stationary toolbars and animations can interfere with matching. Unseen output
areas remain transparent; lost overlap and size limits are reported.
Panoramic and scrolling capture cannot run with interval capture or recording.
Enable "Interval options" to set an interval of at least one whole second and
optionally skip identical frames. "Interval capture... (start/stop)" selects a
screen or window once, saves an image immediately, and repeats until stopped.
Close the desktop chooser too if stopping while it is open. The choices are
saved on start and apply to --interval. Images go to the capture folder without
opening each in the editor or copying it to the clipboard. Stop interval capture
before starting a recording or scrolling capture, and vice versa.
Enable "Daily schedule options", enter a local time in HH:MM, select "Enable
daily capture" and choose "Save daily schedule". Jiffshot must remain open and
requests a screen or window from the desktop portal, which may prompt for
selection and authorization each time. The image is saved without changing
the editor or clipboard. There is at most one
attempt per local date, including across restarts and time changes; a cancelled
or failed request, or an active capture or recording, is not retried that day.
A scheduled minute skipped by a clock or daylight-saving change is missed.
Disabling the schedule prevents future attempts but does not close an existing
desktop chooser; close it to cancel a pending request.
Screenshots, scrolling captures and panoramic captures are copied to the image clipboard by default.
Toggle "Copy captures to clipboard" and choose "Save capture preferences" to
change this. A clipboard failure is reported without discarding the capture.
The capture library can search filenames and existing Jiffshot metadata in the
capture folder and YYYY-MM subfolders, with image, video, pinned, and tagged
filters. Enable "Organize captures" and select an item to edit its tags or pin.
Other sidecar fields are preserved; malformed, concurrently changed, and
symbolic-link metadata files are rejected when detected.
Use app:browser, site:example.com, and tag:planning for case-insensitive
substring matches in those metadata fields. Use age:day or age:week for the
last 24 hours or seven days of file modification time. Combine qualifiers with
ordinary search terms; unknown prefixes are searched literally.
The same panel can open the selected saved capture with another application,
attach it to an email, or copy it to a chosen folder without overwriting an
existing file. It can also send a one-page PDF of the selected saved image to
the print portal; videos cannot be printed. These actions use the saved file,
not unsaved editor changes. To share or print edits, export a flattened image
into the capture folder and select it in the library. Opening, email, and
printing require compatible desktop portals and applications.
In the same panel, "Auto-copy new captures..." selects a folder for automatic
copies of newly saved screenshots, scrolling and panoramic images, interval and
daily captures, and completed recordings. This opt-in persists until "Disable
auto-copy" is selected. Existing files are never overwritten, and failures are
reported without removing the original. The copy folder must differ from the
captures folder. Interval captures copy sequentially, so a slow destination
can delay later captures. Screen text and unsaved editor edits are not copied;
email and printing remain manual.
Enable "Editor properties and effects" to edit annotation text, colors, stroke,
font and opacity, and to apply undoable whole-image effects. For effects with a
numeric setting, enter an Effect parameter within the displayed range, or leave
it blank for the default. Changing effects clears the value. Borders and color
replacement use the current stroke and fill colors. This panel also offers Auto
trim, Copy recognized text, Smart
redact and Simplify UI. Simplify flattens annotations and replaces recognized
text with editable bars; undo restores the original. Smart redact covers entire
recognized lines with sensitive patterns. OCR can miss text, so review before
sharing. Redactions in .jsd are removable and retain the original pixels; export
a flattened image to omit those pixels. Watermark selects an image and places it
at 35% opacity by default in the bottom-right corner. Capture info adds available sidecar
time, window and process metadata, or the current local time when none is
available. Spotlight & magnify uses the selected annotation's area, or the image
center when nothing is selected. It replaces the selected annotation; Undo
restores it. Scroll the controls above the canvas to reach more options in a
small window.
"Export..." saves the flattened image as PNG, JPEG, BMP, GIF, WebP or a
single-page PDF according to its filename extension. Saving as .jsd separately
retains editable annotations.
The "Editor properties and effects" panel also provides controls to select all,
clear the selection, duplicate, delete, group, ungroup, reorder, or flatten
annotations. Ctrl+A selects all, Ctrl+D duplicates, Delete removes the selection,
and Ctrl+T flattens all annotations. Ctrl+Shift+I/G/U/F/B/T inverts the selection,
groups, ungroups, brings forward, sends backward, or flattens selected annotations.
Text fields keep their normal editing shortcuts.
Enable "Templates" to create an editable layout with a theme, optional captions,
numbers and footer. Select an image zone and use "Paste into zone" to fill it
from the clipboard. The zone controls fit, crop, clear and swap images;
Shift-click selects two zones for swapping. Drag-and-drop is not supported.
Enter a preferred global capture shortcut such as CTRL+SHIFT+X and enable it
through the XDG GlobalShortcuts portal. Optionally select "Include global
recording controls" first to request pause/resume and stop/save shortcuts,
preferring Shift+F9 and Shift+F10. The optional "Recording start shortcut" can
start/stop a silent, microphone, system-sound, or mixed-audio recording,
preferring Shift+F8. It defaults to "No start shortcut"; starting still asks the
desktop for capture permission and uses the current webcam-overlay checkbox.
Preferences are saved when shortcuts are enabled. Disable and re-enable them
to apply changed choices. The app requests bindings again at launch; the
desktop may prompt again or choose different bindings. Failed requests are
reported and retried on the next launch unless disabled. Disable shortcuts to
stop automatic rebinding. Portal support varies by desktop.
Choose "Enable tray" to keep Jiffshot running after closing its window when a
StatusNotifier system tray host is available. The preference persists, but
normal launches show the window. Activate the tray icon or use "Open
Jiffshot" to restore the window; its menu also offers capture and quit.
Enabled shortcuts and daily schedules continue while hidden, but the desktop
may still request capture permission. Finish or cancel an active capture
before quitting. Choose "Disable tray" to close normally. If the tray host is
unavailable or disappears, Jiffshot keeps or restores the window and reports
the problem; the saved preference can be retried or disabled.
Choose "Enable login startup" to start Jiffshot in desktops that support XDG
autostart. Login startup hides the editor only when the tray is enabled and a
tray host is available; otherwise it stays visible. "Disable login startup"
turns it off. The user-owned startup entry leaves unrelated entries unchanged.
After moving a portable installation, enable login startup again so it points
to the new launcher. "jiffshot --background" uses the same tray-or-visible
behavior.
While hidden, capture and recording results, scheduled-capture problems, and
shortcut failures are sent to the desktop notification service. Interval
capture notifies on completion, not every frame. If notifications are
unavailable, the editor status remains available and notification errors are
logged.
Trim, cut, and combined-video exports preserve the selected audio track as AAC.
Combined clips are ordered by case-sensitive filename (path breaks ties),
normalized to the first clip's dimensions at 30 fps, and silent clips add
silence if another clip has audio. "Export silent MP4" re-encodes the video
without audio and leaves the source unchanged. "Export video as GIF" follows
source frame timing, rounded to 10 ms; very short frames may be omitted. Its
destination must differ from the source. Full preferences/hotkey
parity is not implemented. See the included
README.md for current capabilities.
Settings and captures live in the user's XDG config/Pictures directories;
installing or removing a package does not modify or delete them.
Building packages from the repository on native Ubuntu 24.04 x64 or ARM64:
cargo build --release --locked -p jiffshot --features static-host
sudo apt install binutils dpkg-dev desktop-file-utils
# Also install PowerShell 7.4 or newer (pwsh); see
# https://learn.microsoft.com/powershell/scripting/install/install-ubuntu
pwsh package/linux/build.ps1 -Format tar.gz,deb -StaticHost
Build the Fedora binary and RPM on native Fedora 43 on each architecture
(or in a Fedora 43 container on a matching native runner):
sudo dnf install gcc-c++ clang-devel leptonica-devel tesseract-devel \
pkgconf-pkg-config gstreamer1-devel gstreamer1-plugins-base-devel \
binutils rpm-build desktop-file-utils dnf5-plugins libicu
sudo dnf config-manager setopt fedora-cisco-openh264.enabled=1
sudo dnf install \
gstreamer1-plugins-base gstreamer1-plugins-good gstreamer1-plugins-bad-free \
gstreamer1-plugin-libav ffmpeg-free pipewire-gstreamer \
tesseract tesseract-langpack-eng fontconfig dejavu-sans-fonts
sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-43.noarch.rpm
sudo dnf swap ffmpeg-free ffmpeg --allowerasing
sudo dnf install gstreamer1-plugins-ugly gstreamer1-plugins-bad-freeworld
cargo build --release --locked -p jiffshot --features static-host
# Also install PowerShell 7.4 or newer (pwsh); see
# https://learn.microsoft.com/powershell/scripting/install/install-rhel
pwsh package/linux/build.ps1 -Format rpm -OutputDir package/out/linux-rpm -StaticHost
The CI Fedora container explicitly installs media plugins, PipeWire's GStreamer
source, English OCR data and DejaVu Sans fonts before workspace tests; development
libraries alone are insufficient. These packages are available for x86_64 and
aarch64 (OCR data/fonts are noarch). Repository setup follows
https://rpmfusion.org/Configuration and https://rpmfusion.org/Howto/Multimedia .
The correct Fedora libav plugin package is gstreamer1-plugin-libav, not
gstreamer1-libav. Full FFmpeg requires Fedora's Cisco OpenH264 repository.
Provider checks require the real fdkaacenc factory on Fedora and fail if codecs,
English data or the expected font are missing. They do not replace native media
tests, which encode and decode audio using the selected AAC encoder and verify
tone content, timing, mixing and edits on each native architecture.
Override the release directory (including CARGO_TARGET_DIR builds):
pwsh package/linux/build.ps1 -BuildDir /tmp/jiffshot-linux-target/release
Outputs default to package/out/linux. The default formats are tar.gz and DEB.
Select -Format rpm for the native Fedora build. DEB and RPM cannot be selected
together, and the builder rejects Ubuntu's incompatible OCR ABI for Fedora RPMs.
Fedora inputs must require libleptonica.so.6 and must not require liblept.so.5.
The default shared-host mode requires the executable and three companion
libraries; -StaticHost packages only the static-host executable. All selected
inputs must be valid little-endian ELF64 for one supported architecture;
every private library must be a shared object. -Arch x64 or -Arch arm64 is an
optional assertion against actual ELF headers, never a relabeling option.
Tar names/top directories use linux-x64 or linux-arm64; DEB architecture and
filenames use amd64 or arm64; RPM target and filenames use x86_64 or aarch64.
-Version (or JIFFSHOT_VERSION) must match the
workspace's X.Y.Z version. SOURCE_DATE_EPOCH controls archive timestamps
(default: 0). SHA256SUMS-linux-x64.txt or SHA256SUMS-linux-arm64.txt covers the
generated artifacts. Keep Ubuntu and Fedora outputs in separate directories;
each invocation writes its own checksum manifest.
The script never modifies the build input or installs the application.
Package tests (Pester 5):
pwsh -c 'Install-Module Pester -RequiredVersion 5.9.1 -Scope CurrentUser -Force'
# Unit/regression tests only, no compiled application required:
pwsh package/linux/run-tests.ps1 -ExcludeTag PackageContent
# Real packages from native builds; use JIFFSHOT_TEST_ARCH=arm64 on ARM64:
JIFFSHOT_TEST_STATIC_HOST=1 JIFFSHOT_TEST_FORMATS=tar.gz,deb pwsh package/linux/run-tests.ps1
JIFFSHOT_TEST_STATIC_HOST=1 JIFFSHOT_TEST_FORMATS=rpm JIFFSHOT_PACKAGE_DIR=package/out/linux-rpm \
pwsh package/linux/run-tests.ps1
# Omit JIFFSHOT_TEST_STATIC_HOST for packages built with the shared host.
# Content tests default to the native machine; CI explicitly asserts the arch.
# Synthetic ARM64 ELF unit tests do not execute an ARM64 runtime.
CI also verifies clean installation/removal and desktop/MIME registration on
Ubuntu 24.04 and Fedora 43.
The source CI also tests global shortcuts, responsive file loading, native
file-picker fallback, image and GIF export and effects, saved-capture sharing,
webcam and frame-rate preferences, screenshots, automatic copies, screen text
OCR, timed, interval and daily capture, screen presets, tray and login startup
with a private Xvfb display and mock D-Bus services. The drivers are
PowerShell 7.4+ scripts; on first run they download Tmds.DBus.Protocol
0.95.2 from nuget.org into ~/.cache/jiffshot-e2e and verify its SHA256 (set
JIFFSHOT_E2E_TMDS_DBUS to a local Tmds.DBus.Protocol.dll to skip the
download). They require pwsh, libxtst6, libgtk-3-0t64, dbus, Xvfb, xclip,
xwininfo, and English Tesseract data:
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_shortcuts_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_load_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_export_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_file_dialog_fallback_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_interactive_effects_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_video_export_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_share_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_webcam_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_recording_frame_rate_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_screenshot_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_automatic_copy_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_grab_text_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_shared_grab_text_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_timed_capture_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_screen_presets_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_interval_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_schedule_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_tray_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
dbus-run-session -- pwsh -NoProfile -File app/tests/linux_autostart_e2e.ps1 \
-Binary target/release/jiffshot -RuntimeDir target/release
This mock does not verify a real desktop's shortcut activation.
Jiffshot is dual-licensed under the MIT License or Apache License, Version 2.0,
at your option. The source repository includes both license texts at its root.
Bundled native runtimes retain their upstream licensing terms.