General clipboard issue on cygwin (mintty, putclip, getclip, /dev/clipboard)

Takashi Yano via Cygwin <[email protected]>
Newsgroups gmane.os.cygwin
Message-ID <[email protected]>
Hi,

I encountered a clipboard issue common to cygwin.

Affected components:
/dev/clipboard, putclip/getclip, mintty

The issue:
If the clipbard is opened by `OpenClipboard(NULL)`, occasionally
SetClipboardData() and GetClipboardData() fails with
ERROR_CLIPBOARD_NOT_OPEN.

When UltraVNC Viewer (https://uvnc.com/) is opened, this issue
happens with a very high probability (> ~90%).

$ echo AAAA > /dev/clipboard
echo: write error: Permission denied

On mintty, text selection by mouse and clicking center button
fails at the first attempt.

For putlclip/getclip, the following command outputs nothing
in a few attempts. ("ABCD" is lost.)
$ echo ABCD |putclip; for a in `seq 100`; do getclip |putclip; done; getclip

$


Solutions:
This can be solved by passing non-zero HWND to OpenClipboard().
Therefore, as for mintty, the following patch is ok I think.
diff --git a/src/winclip.c b/src/winclip.c
index 12c54525..a7cbe365 100644
--- a/src/winclip.c
+++ b/src/winclip.c
@@ -1324,7 +1324,7 @@ static void
 do_win_paste(bool do_path)
 {
   //printf("OpenClipboard win_paste\n");
-  if (!OpenClipboard(null))
+  if (!OpenClipboard(wnd))
     return;

   if (cfg.input_clears_selection)

However, for /dev/clipbard and {put|get}clip, there is no
suitable HWND to pass to OpenClipboard(). Fortunately, I
found the patch attached solves the /dev/clipboard issue.

This is not smart, however it works.

I think similar patch is ok for putclip/getclip.

Any suggestions and comments will be appreciated.

-- 
Takashi Yano <[email protected]>


-- 
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple
0001-Cygwin-clipboard-Add-workaround-for-ERROR_CLIPBOARD_.patch (plain/text, 933 B)
From 1e1f3aca99a9309c7521980d364c32cba02f038e Mon Sep 17 00:00:00 2001
From: Takashi Yano <[email protected]>
Date: Thu, 19 Feb 2026 16:04:15 +0900
Subject: [PATCH] Cygwin: clipboard: Add workaround for
 ERROR_CLIPBOARD_NOT_OPEN

---
 winsup/cygwin/fhandler/clipboard.cc | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/winsup/cygwin/fhandler/clipboard.cc b/winsup/cygwin/fhandler/clipboard.cc
index 12691c7c1..221aaac62 100644
--- a/winsup/cygwin/fhandler/clipboard.cc
+++ b/winsup/cygwin/fhandler/clipboard.cc
@@ -26,10 +26,16 @@ static inline bool
 open_clipboard ()
 {
   const int max_retry = 10;
+retry:
   for (int i = 0; i < max_retry; i++)
     {
       if (OpenClipboard (NULL))
-	return true;
+	{
+	  if (!GetClipboardData (CF_UNICODETEXT)
+	      && GetLastError () == ERROR_CLIPBOARD_NOT_OPEN)
+	    goto retry;
+	  return true;
+	}
       Sleep (1);
     }
   return false;
-- 
2.51.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.