中文 | English
- Clipboard syncing, supporting text/image/file, client-server architecture. You can also use a WebDAV compatible netdisk as server.
- Optimize image type clipboard:
- Paste image to a textbox directly after copying a image file from file system, and vice versa.
- Download the original file and copy it after copying a image in web browser. This is helpful for copying an animated image in browser. Web sites always prevent downloads from non-browser, so this feature isn't always usable.
- Copy the transcoded temporary image file (jpg or gif) after copying a modern image file type (heic, webp, etc.).
SyncClipboard.Server is cross-platform, depends on ASP.NET Core 6.0. Run with:
dotnet /path/to/SyncClipboard.Server.dll --contentRoot ./
Content root folder is SyncClipboard.Server.dll
's parent folder, there will be temporary folders created when running.
Port, username, password can be changed in appsettings.json
.
Choosing a different content root folder is possible. Copy a new appsettings.json
to the folder and run with:
dotnet /path/to/SyncClipboard.Server.dll --contentRoot /path/to/contentRoot
Username and password can be set by env variables. When env variables SYNCCLIPBOARD_USERNAME
and SYNCCLIPBOARD_PASSWORD
are both not empty, the two variables will be used as username and password.
Notes:
- Default Username is
admin
, default Password isadmin
, default port is5033
. - Address to fill in client is
http://ip(or domain name):port
, nothing can be omitted. - Http is not encrypted, including username and password. A https reverse proxy is needed on public network.
docker run -d \
--name=syncclipboard-server \
-p 5033:5033 \
-e SYNCCLIPBOARD_USERNAME=your_username \
-e SYNCCLIPBOARD_PASSWORD=your_password \
--restart unless-stopped \
jericx/syncclipboard-server:latest
Copy a docker-compose.yml file.
curl -sL https://github.com/Jeric-X/SyncClipboard/raw/master/src/SyncClipboard.Server/docker-compose.yml > docker-compose.yml
Change env variables SYNCCLIPBOARD_USERNAME
and SYNCCLIPBOARD_PASSWORD
in docker-compose.yml
to your username and password, then run
docker compose up -d
Notes:
- Server related files are under
src/SyncClipboard.Server
directory. You can download them manually. - Docker image is hosted on Docker Hub/jericx/syncclipboard-server.
You can install it directly from AUR (maintained by @devome):
paru -Sy syncclipboard-server
Then edit its configuration file /etc/syncclipboard/appsettings.json
as needed; be sure to change the username and password. Once modified, start the service (it is highly recommended to configure a reverse proxy and enable HTTPS):
sudo systemctl enable --now syncclipboard.service
Desktop client (Windows/Linux/macOS) has a built-in server, basically the same as standalone server but can be configured with GUI.
Tested server:
Clipboard is auto-synced between desktop clients running on Windows/Linux/macOS.
Download the SyncClipboard.zip
from Release Page.
After extracting, run SyncClipboard.exe
.
Dependencies:
- .NET 6.0 Desktop runtime
- ASP.NET Core 6.0 runtime
- Windows10 2004 or above
- Microsoft Segoe Fluent Icons. It is included by default on Windows 11. You can download it here.
Notes:
- Config files are saved in
%AppData%\SyncClipboard\
. Users can delete them manually.
Downloading page: SyncClipboard.Desktop
Notes:
- File name with
no-self-contained
: .NET 6.0 Desktop runtime and ASP.NET Core 6.0 runtime are required. - File name with
self-contained
: should run with no dependencies. - Config files are saved in
~/.config/SyncClipboard/
(Linux),~/Library/Application Support/SyncClipboard/
(macOS). Uninstaller won't delete them. Users can delete them manually. - Not suport upgrading directly with
deb
orrpm
package. Delete old version first, then install the new version. - Linux: Hotkey is not supported on Wayland.
- macOS:
"SyncClipboard" is damaged, can't be opened
. Use the following command in terminal:sudo xattr -d com.apple.quarantine /Applications/SyncClipboard.app
- macOS: Hotkey requires Accessibility permission. After installing a new version, the permission should be re-granted.
Arch Linux users can directly install from AUR:
paru -Sy syncclipboard-desktop
Use Shortcuts
- Sync manually, import this Shortcut
- Sync Automatically, import this Shortcut. This shortcut keeps running in the background forever, you need to stop it manually. You can also change whether to send notifications and querying interval time manullay.
Import this file, Change the UserName
, UserToken
, url
in Variables
to yours. Make sure no slash(/) at the end of url. HTTP Request Shortcuts
supports using shortcuts from drop-down menu, home screen widgets, home screen icons and share sheet.
Use Autox.js
Import this js file. Change the user config. And set a running trigger, for example, running the script when Android system startup.
// START User Config
const url = 'http://192.168.5.194:5033'
const username = 'admin'
const token = 'admin'
const intervalTime = 3 * 1000 // 3 seconds
const showToastNotification = true
// END User Config
Running in background, the script will download the remote text clipbaord automatically and set it to local clipboard. If satisfy any of the following conditions, upload is automatic.
- The app is running in forground
- Android 9 Pie or lower Android version
- Use root-based tools like Magisk/Xposed to unlock the limition of clipboard operation in background. There are some references:
There are three necessery config(maybe different words, same uses).
- username
- password
- url, format is
http://ip(or domain name):port
. When using a WebDav server, url needs to be pointed to a specific existing folder as the working folder, likehttps://domain.com/dav/folder1/working%20folder
. File name is the best not to contain any special characters or spaces, or you'll have to URL encode it. And do not use this folder to do anything else. If not using a desktop client(Windows/Linux/macOS), create a folder namedfile
in the working folder to sync files. Desktop clients create this folder automatically. Make sure no slash(/) at the end of url.
GET /SyncClipboard.json
PUT /SyncClipboard.json
GET /SyncClipboard.json
HEAD /file/filename // optional
GET /file/filename
PUT /file/filename
PUT /SyncClipboard.json
{
"Type" : "Text"
"Clipboard" : "Content",
"File":""
}
{
"Type": "Image", // or "File", "Group"
"Clipboard": "hash, optional",
"File": "filename"
}
Magick.NET
.NET Community Toolkit
H.NotifyIcon
WinUIEx
moq
Avalonia
FluentAvalonia.BreadcrumbBar
FluentAvalonia
Vanara
Tmds.DBus
SharpHook
DotNetZip.Semverd