Hi Takashi,
Am 24.02.2026 um 02:36 schrieb Takashi Yano:
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.
According to Windows docs, OpenClipboard(0) would make SetClipboardData
fail. There is no such statement about reading from the clipboard.
Accordingly, mintty calls OpenClipbard(wnd) before writing to the
clipboard and (0) only before pasting. Also I'm not aware pasting ever
fails for me. But if there is a chance to fail, I'll add the (wnd) to
both other calls.
About the cygwin patch, could perhaps GetDesktopWindow help?
Thomas
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.
--
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