fix: expand clipboard detection to xclip and xsel

Add xclip and xsel to the whitelist and detection script so users
on systems without wl-copy or clipmanctl can still copy peer info.
This commit is contained in:
Vybe (Coding Agent) 2026-05-21 02:29:13 +00:00
parent 93b257ba5d
commit 6ef933211c
3 changed files with 5 additions and 3 deletions

View file

@ -62,7 +62,7 @@ PluginComponent {
Process { Process {
id: detectClipboard id: detectClipboard
command: ["sh", "-c", "which dms >/dev/null 2>&1 && echo 'dms cl copy' || which wl-copy >/dev/null 2>&1 && echo 'wl-copy' || which clipmanctl >/dev/null 2>&1 && echo 'clipmanctl copy' || echo none"] command: ["sh", "-c", "which dms >/dev/null 2>&1 && echo 'dms cl copy' || which wl-copy >/dev/null 2>&1 && echo 'wl-copy' || which clipmanctl >/dev/null 2>&1 && echo 'clipmanctl copy' || which xclip >/dev/null 2>&1 && echo 'xclip -selection clipboard' || which xsel >/dev/null 2>&1 && echo 'xsel --clipboard --input' || echo none"]
stdout: StdioCollector { stdout: StdioCollector {
onStreamFinished: { onStreamFinished: {

View file

@ -26,7 +26,7 @@ function findActiveExitNode(peerMap) {
return "" return ""
} }
var safeClipboardCmds = ["dms cl copy", "wl-copy", "clipmanctl copy", "none"] var safeClipboardCmds = ["dms cl copy", "wl-copy", "clipmanctl copy", "xclip -selection clipboard", "xsel --clipboard --input", "none"]
function validateClipboardCmd(cmd) { function validateClipboardCmd(cmd) {
return typeof cmd === "string" && safeClipboardCmds.includes(cmd) return typeof cmd === "string" && safeClipboardCmds.includes(cmd)

View file

@ -81,6 +81,8 @@ test("validateClipboardCmd accepts whitelisted values", () => {
assert.strictEqual(validateClipboardCmd("dms cl copy"), true) assert.strictEqual(validateClipboardCmd("dms cl copy"), true)
assert.strictEqual(validateClipboardCmd("wl-copy"), true) assert.strictEqual(validateClipboardCmd("wl-copy"), true)
assert.strictEqual(validateClipboardCmd("clipmanctl copy"), true) assert.strictEqual(validateClipboardCmd("clipmanctl copy"), true)
assert.strictEqual(validateClipboardCmd("xclip -selection clipboard"), true)
assert.strictEqual(validateClipboardCmd("xsel --clipboard --input"), true)
assert.strictEqual(validateClipboardCmd("none"), true) assert.strictEqual(validateClipboardCmd("none"), true)
}) })
@ -140,7 +142,7 @@ test("parseClipboardDetection falls back to empty output", () => {
}) })
test("parseClipboardDetection falls back to none for unexpected strings", () => { test("parseClipboardDetection falls back to none for unexpected strings", () => {
assert.strictEqual(parseClipboardDetection("xclip -selection clipboard"), "none") assert.strictEqual(parseClipboardDetection("pbpaste"), "none")
assert.strictEqual(parseClipboardDetection("custom-tool"), "none") assert.strictEqual(parseClipboardDetection("custom-tool"), "none")
}) })