Implement "Copy Dom0 clipboard" tray menu item
Ctrl+Shift+C would be preferable, but is quite difficult to do safely, and this method seems like a reasonable security/UX compromise. Discussed in: - https://groups.google.com/forum/#!topic/qubes-devel/4_x7Su21i9o - https://github.com/QubesOS/qubes-issues/issues/2438#issuecomment-261704575 Fixes https://github.com/QubesOS/qubes-issues/issues/2450
This commit is contained in:
parent
c7c86d12a7
commit
a0bb943af9
56
qubesmanager/clipboard.py
Normal file
56
qubesmanager/clipboard.py
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
#!/usr/bin/python2
|
||||||
|
#
|
||||||
|
# The Qubes OS Project, http://www.qubes-os.org
|
||||||
|
#
|
||||||
|
# Copyright (C) 2012 Agnieszka Kostrzewa <agnieszka.kostrzewa@gmail.com>
|
||||||
|
# Copyright (C) 2012 Marek Marczykowski <marmarek@mimuw.edu.pl>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
import os
|
||||||
|
import fcntl
|
||||||
|
|
||||||
|
from qubes.qubes import QubesException
|
||||||
|
from PyQt4.QtGui import QApplication
|
||||||
|
|
||||||
|
def do_dom0_copy():
|
||||||
|
copy_text_to_qubes_clipboard(QApplication.clipboard().text())
|
||||||
|
|
||||||
|
def copy_text_to_qubes_clipboard(text):
|
||||||
|
#inter-appviewer lock
|
||||||
|
|
||||||
|
try:
|
||||||
|
fd = os.open("/var/run/qubes/appviewer.lock", os.O_RDWR|os.O_CREAT, 0666)
|
||||||
|
fcntl.flock(fd, fcntl.LOCK_EX)
|
||||||
|
except IOError:
|
||||||
|
QMessageBox.warning (None, "Warning!", "Error while accessing Qubes clipboard!")
|
||||||
|
return
|
||||||
|
|
||||||
|
qubes_clipboard = open("/var/run/qubes/qubes-clipboard.bin", 'w')
|
||||||
|
qubes_clipboard.write(text)
|
||||||
|
qubes_clipboard.close()
|
||||||
|
|
||||||
|
qubes_clip_source = open("/var/run/qubes/qubes-clipboard.bin.source", 'w')
|
||||||
|
qubes_clip_source.write("dom0")
|
||||||
|
qubes_clip_source.close()
|
||||||
|
|
||||||
|
try:
|
||||||
|
fcntl.flock(fd, fcntl.LOCK_UN)
|
||||||
|
os.close(fd)
|
||||||
|
except IOError:
|
||||||
|
QMessageBox.warning (None, "Warning!", "Error while writing to Qubes clipboard!")
|
||||||
|
return
|
@ -23,7 +23,6 @@
|
|||||||
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import fcntl
|
|
||||||
from PyQt4.QtCore import *
|
from PyQt4.QtCore import *
|
||||||
from PyQt4.QtGui import *
|
from PyQt4.QtGui import *
|
||||||
|
|
||||||
@ -32,6 +31,7 @@ from qubes.qubes import QubesException
|
|||||||
import qubesmanager.resources_rc
|
import qubesmanager.resources_rc
|
||||||
|
|
||||||
from ui_logdlg import *
|
from ui_logdlg import *
|
||||||
|
from clipboard import *
|
||||||
|
|
||||||
# Display only this size of log
|
# Display only this size of log
|
||||||
LOG_DISPLAY_SIZE = 1024*1024
|
LOG_DISPLAY_SIZE = 1024*1024
|
||||||
@ -67,31 +67,3 @@ class LogDialog(Ui_LogDialog, QDialog):
|
|||||||
|
|
||||||
def copy_to_qubes_clipboard_triggered(self):
|
def copy_to_qubes_clipboard_triggered(self):
|
||||||
copy_text_to_qubes_clipboard(self.displayed_text)
|
copy_text_to_qubes_clipboard(self.displayed_text)
|
||||||
|
|
||||||
########################COPY TEXT TO QUBES CLIPBOARD
|
|
||||||
|
|
||||||
def copy_text_to_qubes_clipboard(text):
|
|
||||||
#inter-appviewer lock
|
|
||||||
|
|
||||||
try:
|
|
||||||
fd = os.open("/var/run/qubes/appviewer.lock", os.O_RDWR|os.O_CREAT, 0666)
|
|
||||||
fcntl.flock(fd, fcntl.LOCK_EX)
|
|
||||||
except IOError:
|
|
||||||
QMessageBox.warning (None, "Warning!", "Error while accessing Qubes clipboard!")
|
|
||||||
return
|
|
||||||
|
|
||||||
qubes_clipboard = open("/var/run/qubes/qubes-clipboard.bin", 'w')
|
|
||||||
qubes_clipboard.write(text)
|
|
||||||
qubes_clipboard.close()
|
|
||||||
|
|
||||||
qubes_clip_source = open("/var/run/qubes/qubes-clipboard.bin.source", 'w')
|
|
||||||
qubes_clip_source.write("dom0")
|
|
||||||
qubes_clip_source.close()
|
|
||||||
|
|
||||||
try:
|
|
||||||
fcntl.flock(fd, fcntl.LOCK_UN)
|
|
||||||
os.close(fd)
|
|
||||||
except IOError:
|
|
||||||
QMessageBox.warning (None, "Warning!", "Error while writing to Qubes clipboard!")
|
|
||||||
return
|
|
||||||
|
|
||||||
|
@ -57,6 +57,7 @@ from backup import BackupVMsWindow
|
|||||||
from global_settings import GlobalSettingsWindow
|
from global_settings import GlobalSettingsWindow
|
||||||
from log_dialog import LogDialog
|
from log_dialog import LogDialog
|
||||||
from thread_monitor import *
|
from thread_monitor import *
|
||||||
|
from clipboard import *
|
||||||
|
|
||||||
|
|
||||||
qubes_clipboard_info_file = "/var/run/qubes/qubes-clipboard.bin.source"
|
qubes_clipboard_info_file = "/var/run/qubes/qubes-clipboard.bin.source"
|
||||||
@ -1751,6 +1752,8 @@ class QubesTrayIcon(QSystemTrayIcon):
|
|||||||
|
|
||||||
action_showmanager = self.create_action("Open VM Manager",
|
action_showmanager = self.create_action("Open VM Manager",
|
||||||
slot=show_manager, icon="qubes")
|
slot=show_manager, icon="qubes")
|
||||||
|
action_copy = self.create_action("Copy Dom0 clipboard", icon="copy",
|
||||||
|
slot=do_dom0_copy)
|
||||||
action_backup = self.create_action("Make backup")
|
action_backup = self.create_action("Make backup")
|
||||||
action_preferences = self.create_action("Preferences")
|
action_preferences = self.create_action("Preferences")
|
||||||
action_set_netvm = self.create_action("Set default NetVM",
|
action_set_netvm = self.create_action("Set default NetVM",
|
||||||
@ -1771,6 +1774,7 @@ class QubesTrayIcon(QSystemTrayIcon):
|
|||||||
action_blk_menu.setMenu(self.blk_menu)
|
action_blk_menu.setMenu(self.blk_menu)
|
||||||
|
|
||||||
self.add_actions(self.menu, (action_showmanager,
|
self.add_actions(self.menu, (action_showmanager,
|
||||||
|
action_copy,
|
||||||
action_blk_menu,
|
action_blk_menu,
|
||||||
action_backup,
|
action_backup,
|
||||||
action_sys_info,
|
action_sys_info,
|
||||||
|
@ -38,6 +38,7 @@ cp qubesmanager/mount_for_backup.sh $RPM_BUILD_ROOT/usr/libexec/qubes-manager/
|
|||||||
|
|
||||||
mkdir -p $RPM_BUILD_ROOT%{python_sitearch}/qubesmanager/
|
mkdir -p $RPM_BUILD_ROOT%{python_sitearch}/qubesmanager/
|
||||||
cp qubesmanager/main.py{,c,o} $RPM_BUILD_ROOT%{python_sitearch}/qubesmanager
|
cp qubesmanager/main.py{,c,o} $RPM_BUILD_ROOT%{python_sitearch}/qubesmanager
|
||||||
|
cp qubesmanager/clipboard.py{,c,o} $RPM_BUILD_ROOT%{python_sitearch}/qubesmanager
|
||||||
cp qubesmanager/block.py{,c,o} $RPM_BUILD_ROOT%{python_sitearch}/qubesmanager
|
cp qubesmanager/block.py{,c,o} $RPM_BUILD_ROOT%{python_sitearch}/qubesmanager
|
||||||
cp qubesmanager/table_widgets.py{,c,o} $RPM_BUILD_ROOT%{python_sitearch}/qubesmanager
|
cp qubesmanager/table_widgets.py{,c,o} $RPM_BUILD_ROOT%{python_sitearch}/qubesmanager
|
||||||
cp qubesmanager/appmenu_select.py{,c,o} $RPM_BUILD_ROOT%{python_sitearch}/qubesmanager
|
cp qubesmanager/appmenu_select.py{,c,o} $RPM_BUILD_ROOT%{python_sitearch}/qubesmanager
|
||||||
@ -97,6 +98,9 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
%{python_sitearch}/qubesmanager/main.py
|
%{python_sitearch}/qubesmanager/main.py
|
||||||
%{python_sitearch}/qubesmanager/main.pyc
|
%{python_sitearch}/qubesmanager/main.pyc
|
||||||
%{python_sitearch}/qubesmanager/main.pyo
|
%{python_sitearch}/qubesmanager/main.pyo
|
||||||
|
%{python_sitearch}/qubesmanager/clipboard.py
|
||||||
|
%{python_sitearch}/qubesmanager/clipboard.pyc
|
||||||
|
%{python_sitearch}/qubesmanager/clipboard.pyo
|
||||||
%{python_sitearch}/qubesmanager/block.py
|
%{python_sitearch}/qubesmanager/block.py
|
||||||
%{python_sitearch}/qubesmanager/block.pyc
|
%{python_sitearch}/qubesmanager/block.pyc
|
||||||
%{python_sitearch}/qubesmanager/block.pyo
|
%{python_sitearch}/qubesmanager/block.pyo
|
||||||
|
Loading…
Reference in New Issue
Block a user