有没有办法在Cygwin中创建/ dev / clipboard?


2

这个答案说,Cygwin有一个/dev/clipboard设备,它与默认的Windows剪贴板同步。

有没有办法在Linux中为主剪贴板提供相同的功能?也许有人写了一个FUSE驱动程序或类似的?

更具体地说,我正在Linux上寻找类似文件的设备,它允许以下内容:

$ echo Foo > /dev/clipboard
# clipboard content: "Foo", usable via Ctrl-V
# set clipboard via Ctrl-C to "Bar"
$ cat /dev/clipboard > test.txt
# test.txt content: "Bar"

Answers:


4

有一个FUSE守护进程谈话X11肯定是可能的。但是还有一些其他问题:

Nitpick:“主要剪贴板”自相矛盾。X11有两个常用的“选择”; 选择和中键单击时使用名为“PRIMARY”的单词,按CtrlC或时使用名为“CLIPBOARD”的单键CtrlV

Cygwin /dev/clipboard是在cygwin1运行时中实现的,因此它的代码在与访问程序本身相同的上下文中运行。如果两个用户试图阅读它,他们都会看到自己的剪贴板内容,因为他们自己直接访问它。

同时,Linux文件系统挂载是全局的 - 所有读取请求都通过单个FUSE服务器进程(对于该FUSE挂载); 意思是,它不确定应该读取哪个X服务器的剪贴板。

(请记住,可以有多个用户登录,并且一次运行多个X服务器。)

针对多用户问题有三种可能的解决方案:

  • 有一个系统范围的FUSE安装在/dev/clipboard。每次FUSE守护程序收到一个打开的请求时,它需要获取请求程序的PID,访问/proc/<pid>/environ,从中获取DISPLAY =&XAUTHORITY =,使用该信息连接到正确的X服务器,并读取剪贴板。

  • 而不是/ dev,将特殊文件放在用户的主目录中,例如~/clipboard。每个用户都运行守护程序的单独副本。GNOME的Gvfs使用此方法/run/user/*/gvfs(早期~/.gvfs)。它将每个用户限制为一个图形会话,但这很好 - 还有许多其他的东西,每个用户也只能工作一次。

  • 登录时设置一个新的挂载命名空间,例如使用pam_namespace,这样每个会话都可以单独查看挂载的位置(从根命名空间继承,但能够挂载例如/ dev / clipboard,而不会从外部看到它) )。然后,F会话守护程序由X会话管理器启动,与上一个方法相同,但不限于每个用户一个会话。


有趣!谢谢你的回答。我没有想到Cygwin没有的多用户问题。
Boldewyn 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.