有一个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会话管理器启动,与上一个方法相同,但不限于每个用户一个会话。