Commit Graph

241 Commits

Author SHA1 Message Date
Uri Lublin
74fdd26c94 vnc: no dialog for server-closed-connection error
Following commit de5cd71, when the server closes the connection
(likely when qemu-kvm exits), a dialog is shown to the user.

This behavior change is not good for automatic tests that expect
virt-viewer to exit without any dialog.

This patch makes sure no dialog is shown for this error, by
checking if the VNC connection was already initialized.

Signed-off-by: Uri Lublin <uril@redhat.com>
2021-01-18 22:48:47 +02:00
Uri Lublin
e89e82eeb9 hotkeys: enable setting zoom hotkeys from command line
Signed-off-by: Uri Lublin <uril@redhat.com>
2021-01-05 11:06:19 +02:00
Shawn M. Chapla
f08cb607a4 Add "USB device reset" accel
Adds a "USB device reset" default keyboard shortcut (ctrl+shift+r), as
well as the option to override this shortcut with the --hotkeys opt.
Updates documentation accordingly.

Signed-off-by: Shawn M. Chapla <schapla@codeweavers.com>
2020-11-26 18:22:23 +00:00
Shawn M. Chapla
1608dabd9f Add "USB device reset" option to File menu
Adds a "USB device reset" option to the File menu. When selected, "USB
device reset" will disconnect and reconnect all currently connected USB
devices.

Signed-off-by: Shawn M. Chapla <schapla@codeweavers.com>
2020-11-26 18:22:23 +00:00
Daniel P. Berrangé
db827dedc9 Add a --shared / -s flag for shared session access
By default when connecting with VNC, an existing viewer will be kicked
off. This adds a --shared / -s flag which tells the server we are
willing the share the session with other clients.

This is wired up for VNC only.

https://bugzilla.redhat.com/show_bug.cgi?id=1060425

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2020-11-26 09:55:58 +00:00
Uri Lublin
de5cd71013 vnc: show an error dialog upon vnc-error
For example when connecting by accident to a spice server

Signed-off-by: Uri Lublin <uril@redhat.com>
2020-10-27 19:53:40 +02:00
Pino Toscano
35443daed4 Remove unused i18n translation
All the g_printerr does is printing the message of the GError with a
newline at the end. Hence, use a simple format string without the need
to translate it.

Signed-off-by: Pino Toscano <ptoscano@redhat.com>
2020-07-23 12:01:52 +02:00
Pino Toscano
8db413e689 Fix few spellings
"ID", "oVirt", "SSH", "UNIX", "URI", "UUID"

Signed-off-by: Pino Toscano <ptoscano@redhat.com>
2020-07-23 12:01:52 +02:00
Daniel P. Berrangé
3e1d619529 src: remove trailing whitespace
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2020-06-26 15:50:50 +01:00
Daniel P. Berrangé
e587274b76 src: remove tab characters from indent
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2020-06-26 15:50:50 +01:00
Stephen Thom
fedaa5f89a Added -K --keymap commandline option that allows user to block certain keypresses or to remap keypresses being sent to the underlying spice or vnc widget
Signed-off-by: Stephen Thom <sthom@williamhill.co.uk>
2020-06-05 14:12:19 +00:00
Julien Ropé
d84149a92c Fix potential file descriptor leaks found by Coverity.
The error code returned by virt_viewer_session_open_fd() and
virt_viewer_session_channel_open_fd() were not checked. The file
descriptor passed to them could then be left opened even if the function
failed, causing a leak of resources.

This was reported by a Coverity scan, logged under
https://bugzilla.redhat.com/show_bug.cgi?id=1655792

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Julien Ropé <jrope@redhat.com>
2020-04-03 14:08:00 +01:00
Julien Ropé
e279712281 Remember monitor mapping on close.
When the application is stopped, if the windows are in fullscreen, their
position on the client will be remembered.

This change uses the existing option 'monitor-mapping' in the settings
file to save the position and reuse it on next launch.

This implements part of the requirement from
https://bugzilla.redhat.com/show_bug.cgi?id=1179070

NOTE: this feature is effective only with GTK >= 3.22

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Julien Ropé <jrope@redhat.com>
2020-02-07 13:57:56 +00:00
Francesco Giudici
a724dff8a3 remote-viewer: add handler for SIGINT signal
When remote-viewer is started from terminal, CTRL-C sends a SIGINT
signal to the program causing immediate termination. On linux clients
usb redirected devices are left without any kernel driver attached,
causing them to appear as no more available to the host.
Add a SIGINT handler to allow a clean exit, in particular to allow
the kernel to attach back the host driver.
The issue is present on linux only.

To perform usb device redirection, virt-viewer leverages spice-gtk
library, which in turn relies on usbredir library, which uses libusb.
In order to take control of the usb device the auto-loaded kernel
driver must be detached. This is achieved (in the very end) with
libusb_detach_kernel_driver(). Then the device interfaces can be claimed
with libusb_claim_interface() and get in control to the application.
During normal application termination, the usb channel is teared down,
performing a reset of the usb device and giving back the control of the
device to the kernel (libusb_attach_kernel_driver()).
If the application quits without doing this, the device interfaces will
end up with no driver attached, making them not usable in the host
system.

Note that enabling libusb_set_auto_detach_kernel_driver() does not solve
the issue, as this is just a convenient API from libusb: libusb will
take care of detaching/attaching the driver to the interfaces of the usb
device each time a call to libusb_release_interface() and
libusb_claim_interface() is performed. An unexpected quit of the
application will skip the libusb_release_interface() call too, leaving
the interfaces without any driver attached.

Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1713311

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Francesco Giudici <fgiudici@redhat.com>
2020-01-17 16:37:52 +00:00
Aleksei Nikiforov
ceb21d7894 remote-viewer: Allow toggling shared clipboard
Signed-off-by: Aleksei Nikiforov <darktemplar@basealt.ru>
Message-Id: <20190304143712.27989-1-darktemplar@basealt.ru>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2019-03-07 19:52:00 +01:00
Eduardo Lima (Etrunko)
ed4768d589 Update usage of GObject private structures
New functions and macros have been added in glib 2.38 to better handle
this case.

c8de2b11bb/NEWS

The old method is being deprecated as of version 2.58.

https://gitlab.gnome.org/GNOME/glib/merge_requests/7/commits

Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2019-02-22 09:19:27 -03:00
Daniel P. Berrangé
9e4cc377a5 Fix prototype of function with no arguments
Modern C standard requires the function to be "void"

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2019-02-19 14:52:59 +00:00
Paul Donohue
54b9d05b04 Report gtk_accel_map_change_entry() failures
Signed-off-by: Paul Donohue <virt-tools@PaulSD.com>
Message-Id: <1533340753-24176-2-git-send-email-virt-tools@PaulSD.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2019-02-01 11:21:33 +01:00
Marc-André Lureau
e7b134c270 app: add "vm-running" property
Add "vm-running" property and modify "menu-vm-pause" check button
state when the running state changes.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-12-21 18:16:41 +04:00
Marc-André Lureau
2d8d923fd0 app: add "machine" UI
Add a new "Machine" menu, which allows to Pause/Reset/Power Down a VM.

The menu is only visible if "vm-ui" app property is set.

When the application quits, it will also send a quit action to the VM.

This is a similar behaviour/UI as qemu -display gtk.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-12-21 18:16:39 +04:00
Marc-André Lureau
a0a2d99fbd app: create a window for VTE displays
virt_viewer_app_display_added() now handles VTE displays. They should
be skipped for monitor configuration, and they don't emit "show-hint".

(a VTE display has a monitor nth == -1, which is now a valid value)

The associated window will be hidden when virt-viewer is started.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-12-21 18:16:03 +04:00
Marc-André Lureau
fd25645c11 app: append VTE consoles to display submenu
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-12-21 15:14:34 +04:00
Marc-André Lureau
f6448ae6e6 app: set subtitle using VTE name
Currently, subtitle indicate the monitor number, ex: "Fedora (1)".

Custom subtitle use %d to place the monitor number.

Let's make this placeholder more generic to place the name of the
console, ex: "Fedora (Serial)".

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-12-21 15:14:31 +04:00
Qiu Wenbo
e1186e0c92 win32: fix command line encoding on windows platform
On Windows, the arguments we get in GApplication::ocal_command_line
come from g_win32_get_command_line(), and g_option_context_parse_strv()
documentation says:
« On Windows, the strings are expected to be in UTF-8. This is in
contrast to g_option_context_parse() which expects them to be in the
system codepage, which is how they are passed as argv to main(). See
g_win32_get_command_line() for a solution. »

This was causing issues on Windows when running:
remote-viewer -t "你好" spice://<target-host>:5900
2018-10-16 11:39:12 +02:00
Marc-André Lureau
41f889f84d app: simplify toggling visibility
There is a hack to maintain the toggle state to a desired state within
the "toggled" handler.

However it is only necessary for the ask-quit case. In this case, we
want to maintain the item active, which is simpler to handle than the
general case. Simplify the code by folding
virt_viewer_app_window_set_visible() and removing the static
"reentering" hack, only maintaining "active" on the last item.

Note that the hack was needed since there is no way to hook a signal
handler on "clicked" before "toggled" is emitted and handled by Gtk,
to avoid the recursion.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-09-25 22:01:32 +04:00
Victor Toso
7ffb7f9cf4 app: Always add guest name comment
Even when the user adds comments, we should place the guest's name
unless it is present already.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1623756

Signed-off-by: Victor Toso <victortoso@redhat.com>
Acked-by: Christophe Fergeau <cfergeau@redhat.com>
2018-09-03 07:09:21 +02:00
Christophe Fergeau
05c8b75113 app: Remove VirtViewerApp::has-focus
This is no longer needed since 140cb84
'remote-viewer: remove --spice-controller'

Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2018-08-06 13:20:04 +02:00
Eduardo Lima (Etrunko)
5d9e6d2338 kiosk: Show authentication dialog again if cancelled
Related: https://bugzilla.redhat.com/show_bug.cgi?id=1446161

Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2017-05-31 10:21:52 -03:00
Pavel Grunt
fe538a9296 app: Allow to connect to channel using unix socket
Only method for connecting to channel opened later was ssh, however
this method failes when unix socket is used:

    <graphics type='spice'>
      <listen type='socket' socket='/tmp/spice.sock'/>
    </graphics>

Related: rhbz#1335832, rhbz#1411765

Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
2017-04-19 11:07:29 +02:00
Jonathon Jongsma
e1adf25b6a Avoid warning when loading initial monitor mapping
When started in fullscreen mode with a monitor-mapping configuration
option, we are getting the following warnings on the terminal:

    (process:27428): Gdk-CRITICAL **: gdk_screen_get_n_monitors: assertion 'GDK_IS_SCREEN (screen)' failed

    ** (process:27428): WARNING **: Invalid monitor-mapping configuration: monitor #1 for display #1 does not exist

This is apparently because we were processing the fallback monitor
mapping before the graphic server display was opened, so
gdk_screen_get_default() returned NULL. This resulted in
gdk_screen_get_n_monitors() reporting that we had 0 monitors.

This patch moves the fallback monitor mapping parsing from
virt_viewer_app_init() to virt_viewer_app_on_application_startup(),
after chaining up to the base class startup() vfunc. The graphic server
display is opened in the base class vfunc, so by the time that returns,
we should be able to query the number of monitors.

The patch also adds a check in virt_viewer_parse_monitor_mappings() to
ensure that we pass a sane value for nmonitors.

Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
Acked-by: Pavel Grunt <pgrunt@redhat.com>
2017-04-11 15:20:01 -05:00
Snir Sheriber
d7ef44d44f app: Update warning msg in virt-viewer's window
Information about connection issues during display
activation will appear in virt-viewer's window

Related: rhbz#1386630
2017-01-10 11:23:55 +01:00
Pavel Grunt
a744f9a5ce app: Inform user about connection failure
Use errno to get the reason of the failure

Resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=1377100
2016-10-05 14:58:43 +02:00
Daniel P. Berrange
35e489d519 virt-viewer: fix display of guest name in title for vnc
The following commit broke the display of the guest name in
the title for VNC displays:

  commit 61a1bc4dcb
  Author: Pavel Grunt <pgrunt@redhat.com>
  Date:   Wed Apr 15 13:50:35 2015 +0200

    session-vnc: Set window for display to avoid gtk-vnc v0.3.8 crash

    The VNC display widget of gtk-vnc v0.3.8 needs a window at the moment

The problem is that this causes the window to be associated
with the display before the guest name is available. Thus
when ensure_window_for_display() runs, the window is already
configured and so it never invokes the logic to set the title.

The fix is to unconditionally update the title in the
ensure_window_for_display() method, even if the window already
exists.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-07-12 10:46:06 +01:00
Fabiano Fidêncio
0bba2d07af app,vnc: Don't retry to authenticate when vvfile authentication fails
When connecting to a RHEVM/oVirt machine through an expired vvfile the
user ends up in an endless loop of getting an error message, pressing
"Okay", re-scheduling a new connection retry. getting an error message
due to the expired vvfile and so on.

In order to avoid the issue, let's not re-schedule the connection retry
when the user tries to connect through a vvfile and it fails.

Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com>
Acked-by: Christophe Fergeau <cfergeau@redhat.com>
2016-07-07 17:11:13 +02:00
Fabiano Fidêncio
1315f0aa3d ui: Rename UI files to .ui (instead of .xml)
When using GtkApplication, Gtk automatically searches for the menus of
the application at "org/example/app/gtk/menus.ui".

Currently we don't have a "menus.ui", but try to see this commit is a
first step in order to use app-menu.

For now, let's standardize that all our UI files will have the ".ui"
extension instead of the ".xml" one.

Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com>
Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
2016-06-20 17:33:53 +02:00
Fabiano Fidêncio
0e98f93b0e remote-viewer: Add missing chain-up to parent's window_added() method
It hasn't bitten us (so hard) so far but would from the moment we add
support to app-menu/headerbar.

By not chaining-up to the parent's method, gtk_window_set_application()
is never called. This causes GApplication object not being able to load
the app-menu, but using the "fallback" which only contains the "Quit"
item.

By chaining-up to the parent's method, g_application_hold() call on
virt-viewer-app.c can be removed, as it is already called by the
parent's window_added() method.

Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com>
Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
2016-06-20 17:33:15 +02:00
Pavel Grunt
ffa460b8c6 app: Check validity of hotkey
The hotkey is valid if it has a valid value. The value is valid if it is
not empty and is successfully parsed by gtk_accelerator_parse().

These hotkeys formats are considered invalid:
 "key" - missing value
 "key=" - missing value
 "key=abcd" - value cannot be parsed by gtk_accelerator_parse()

Resolves: rhbz#1339572

Acked-by: Fabiano Fidêncio <fidencio@redhat.com>
2016-06-02 11:04:02 +02:00
Pavel Grunt
7d7e8c2aae app: Use debug to inform about smartcard shortcuts state
Related: rhbz#1339572

Acked-by: Fabiano Fidêncio <fidencio@redhat.com>
2016-06-02 10:59:18 +02:00
Pavel Grunt
4b6fc261d0 Add mnemonics for each display item
Related: rhbz#1332545

Acked-by: Fabiano Fidêncio <fidencio@redhat.com>
2016-05-31 16:44:07 +02:00
Pavel Grunt
ab603d8e25 virt_viewer_parse_monitor_mappings: Add parameter for client monitors
Drop dependency on gdk. it allows to write tests not depending
on the client's configuration.
2016-03-08 19:04:04 +01:00
Pavel Grunt
e0c6718c3f Move monitor mapping parsing from app to util
It is not specific to VirtViewerApp.
Following commits will add support for tests thanks to this move.
2016-03-08 19:03:53 +01:00
Fabiano Fidêncio
adf1ee3823 app, cosmetic: remove one unneeded level of identation
Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com>
Acked-by: Pavel Grunt <pgrunt@redhat.com>
2016-03-07 16:04:01 +01:00
Fabiano Fidêncio
5f26924535 app: monitor-config - do it all or nothing
Don't keep trying to use a monitor config when it already failed for one
monitor, otherwise virt-viewer can end up in a situation where none of
the displays are enabled but the program is still running.
So, in case of any failure, let's skip the whole monitor config, forcing
virt-viewer to use the "fallback" one instead.

Resolves: rhbz#1315206

Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com>
Acked-by: Pavel Grunt <pgrunt@redhat.com>
2016-03-07 16:03:52 +01:00
Fabiano Fidêncio
82e13442b9 Use GResource for loading ui files
Let's take advantage of GResource for loading ui files in a better and
cleaner way than virt_viewer_util_load_ui() was doing.
It also brings the benefit, at least for developers, of being able to
test ui changes without having to "make install" virt-viewer.

Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com>
Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2016-03-03 23:08:37 +01:00
Fabiano Fidêncio
ad6924aff1 app: Remove useless libxml includes
Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2016-03-03 23:08:32 +01:00
Eduardo Lima (Etrunko)
d18bbc6f5b Don't open the default display while parsing command line
Since commit a9ce19f it has not been possible to check app version from
a tty without X session running. The issue is that gtk_get_option_group
function opens the default display if passed TRUE as argument.

Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
Acked-by: Fabiano Fidêncio <fidencio@redhat.com>
2016-02-26 22:23:07 +01:00
Fabiano Fidêncio
a37127c7cf cleanup: Drop old compatibilty code
A few more pieces of old compatibility code can be dropped, as we
already depend on GLib 2.38.

Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com>
Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
2016-02-24 16:57:34 +01:00
Fabiano Fidêncio
80ac4d5774 app: Don't leave a window opened in case of connection error
Since commit ed9b3f3 the main window is not hidden when disconnecting.
But it also is not hidden when a connection error occurs, leaving a
black display with a not so accurate message to the users in case they
try to connect to a non-valid address from the remote-viewer connection
window and in this case the main window (display #1) shuldn't be shown.

The impetus for this chance is the following:
- user runs remote-viewer without any argument
- the remote-viewer connection window shows up
- user attempts to connect to a non-valid address
- a dialog pops up indicating a failure connecting to the graphic server
- the main window shows up saying "Connecting to the graphic server"
- user clicks 'Ok'
- the main window stays there with the same message

As a user, I expect the program to not show the main window in
connecting failure cases. This patch accomplishes that.
2016-02-24 07:21:06 +01:00
Eduardo Lima (Etrunko)
a9ce19f848 Port to GtkApplication API's
Most of this patch consists in code being shuffled around to fit the
expected flow while using the new APIs. I tried my best to make this
patch the less intrusive as possible. Main changes are:

- Updated build requirements
   * glib version 2.38
   * gtk+ version 3.10
   * gio

- VirtViewerApp is now a subclass of GtkApplication.
  Some mainloop calls were replaced:
   * gtk_main() -> g_application_run()
   * gtk_quit() -> g_application_quit()

- Unified command line option handling.
  The logic has moved from the main functions and split in common
  options, and specific ones for each application. With this, the main
  functions were highly simplified, and now basically responsible for
  instantiating the App object and running the main loop.

- All Window objects must be associated with the Application.
  With this, there is no need to emit our own 'window-added'/'window-
  removed' signals, as those will be emited by GtkApplication whenever
  gtk_application_add_window() and gtk_application_remove_window() are
  called. Also, 'window-removed' was not being used anywhere.

Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2016-02-18 21:45:56 +01:00
Fabiano Fidêncio
4235ef3453 Drop support to gtk2
The 3.0 release was the last one that still supports GTK2. For the
Windows builds the support to GTK2 was dropped in the previous release.
Let's do the same for the entire project now.

Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2016-02-15 21:49:57 +01:00