commit 4176bc23adc2ec3f23fd1c1c8e33422417475ee4
| author | 斟酌 鵬兄 <tgckpg@gmail.com> |
| date | 2026-09-07T05:15:13Z |
| subject | Removed incorrect cleanup impl |
commit 4176bc23adc2ec3f23fd1c1c8e33422417475ee4
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date: 2026-09-07T05:15:13Z
Removed incorrect cleanup impl
---
bash/sources/42_clipboard_server | 64 ++++++++++++++++++++++++++--------------
1 file changed, 42 insertions(+), 22 deletions(-)
diff --git a/bash/sources/42_clipboard_server b/bash/sources/42_clipboard_server
index ca7683b..ddde33f 100644
--- a/bash/sources/42_clipboard_server
+++ b/bash/sources/42_clipboard_server
@@ -7,10 +7,34 @@ SSH_CLIPBOARD_PIDFILE="${SSH_CLIPBOARD_PIDFILE:-$SSH_CLIPBOARD_DIR/ssh-clipboard
SSH_CLIPBOARD_PASTE_PIDFILE="${SSH_CLIPBOARD_PASTE_PIDFILE:-$SSH_CLIPBOARD_DIR/ssh-clipboard-paste.pid}"
SSH_CLIPBOARD_LOG="${SSH_CLIPBOARD_LOG:-$SSH_CLIPBOARD_DIR/ssh-clipboard.log}"
-# These paths are created on the remote host.
-SSH_CLIPBOARD_REMOTE_COPY_SOCKET="/tmp/ssh-clipboard-copy-client.sock"
-SSH_CLIPBOARD_REMOTE_PASTE_SOCKET="/tmp/ssh-clipboard-paste-client.sock"
+SSH_CLIPBOARD_CLIENT_ID="$(
+ hostname |
+ tr '[:upper:]' '[:lower:]' |
+ tr -c 'a-z0-9_.-' '_'
+)"
+SSH_CLIPBOARD_REMOTE_COPY_SOCKET="/tmp/ssh-clipboard-copy-${SSH_CLIPBOARD_CLIENT_ID}.sock"
+SSH_CLIPBOARD_REMOTE_PASTE_SOCKET="/tmp/ssh-clipboard-paste-${SSH_CLIPBOARD_CLIENT_ID}.sock"
+
+function _ssh_clipboard_find_remote_socket {
+ local type="$1"
+ local socket found=""
+
+ for socket in /tmp/ssh-clipboard-"$type"-*.sock; do
+ [ -S "$socket" ] || continue
+
+ # More than one clipboard client available.
+ if [ -n "$found" ]; then
+ return 1
+ fi
+
+ found="$socket"
+ done
+
+ [ -n "$found" ] || return 1
+
+ printf '%s\n' "$found"
+}
function clipboard_server_running {
local pid
@@ -128,6 +152,14 @@ function sshc {
"$@" \
>/dev/null 2>&1
then
+ echo "-- cleaning stale clipboard sockets"
+
+ command ssh "$@" \
+ "rm -f \
+ '$SSH_CLIPBOARD_REMOTE_COPY_SOCKET' \
+ '$SSH_CLIPBOARD_REMOTE_PASTE_SOCKET'" \
+ </dev/null || return
+
echo "-- starting clipboard ssh tunnel"
command ssh \
@@ -147,16 +179,20 @@ function sshc {
"$@"
}
+
function pbcopy {
- if [ -n "${SSH_CLIPBOARD_REMOTE_COPY_SOCKET:-}" ] &&
- [ -S "$SSH_CLIPBOARD_REMOTE_COPY_SOCKET" ]; then
+ local remote_socket
+
+ remote_socket="$(_ssh_clipboard_find_remote_socket copy)"
+
+ if [ -n "$remote_socket" ]; then
command -v socat >/dev/null 2>&1 || {
echo "pbcopy: socat is required for the remote clipboard" >&2
return 1
}
- socat - "UNIX-CONNECT:$SSH_CLIPBOARD_REMOTE_COPY_SOCKET"
+ socat - "UNIX-CONNECT:$remote_socket"
return $?
fi
@@ -216,22 +252,6 @@ function pbpaste {
esac
}
-
-function cleanup_ssh_clipboard {
- [ -n "${SSH_CONNECTION:-}" ] || return
-
- [ -S "$SSH_CLIPBOARD_REMOTE_COPY_SOCKET" ] &&
- rm -f -- "$SSH_CLIPBOARD_REMOTE_COPY_SOCKET"
-
- [ -S "$SSH_CLIPBOARD_REMOTE_PASTE_SOCKET" ] &&
- rm -f -- "$SSH_CLIPBOARD_REMOTE_PASTE_SOCKET"
-}
-
-
if [ -z "${SSH_CONNECTION:-}" ] && init_clipboard_server; then
alias ssh='sshc'
fi
-
-if [ -n "${SSH_CONNECTION:-}" ]; then
- trap cleanup_ssh_clipboard EXIT HUP TERM
-fi