-
Install a working (and compiled) version of virt-viewer. You may view the homebrew package's upstream source on GitHub.
brew tap jeffreywildman/homebrew-virt-manager brew install virt-viewer
-
Once that's installed should be able make a call
remote-viewer
with a pve-spice.vv file downloaded from proxmox web interfaceremote-viewer pve-spice.vv
Check out this useful script for debugging. There are also several other cli tools like this one on GitHub that can be used to test the same sort of thing.
We want remote-viewer to automatically start and open the session when we double click the VM entry in proxmox. To do that we need to first create a small helper application.
-
Launch
Automator
and select Application from the dropdown list, when prompted. -
Search for
shell
and drag to the right. The contents:/usr/local/bin/remote-viewer "$@"
Make sure to select
as arguments
for passing the input. Save as~/Applications/pve-spice-launcher.app
. -
Locate a pve-spice.vv file and right click, and go to
Get Info -> Open With -> Change All
, look for the .app file you just made. -
In Chrome, click on the small arrow on the list of downloads at the bottom, and select "Always open files of this type"
-
If everything is set up correctly you should be able to double-click on the VM in the left pane of Proxmox and remote-viewer should start up and take care of the rest.
Note: the pve-spice.vv files will be automatically deleted by remote-viewer
Enjoy!
I was getting this output. Fix included below…
(remote-viewer:1437): virt-viewer-WARNING **: 22:16:26.367: (../src/virt-viewer-window.c:831):accel_key_to_keys: runtime check failed: ((accel_mods & ~(GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)) == 0)
2024-11-07 22:16:26.509 remote-viewer[1437:17842] +[IMKClient subclass]: chose IMKClient_Legacy
objc[1439]: Class ResultReceiver is implemented in both /usr/local/Cellar/gtk+3/3.24.43/lib/libgtk-3.0.dylib (0x103a61e40) and /usr/local/Cellar/gtk4/4.16.5/lib/libgtk-4.1.dylib (0x111ed3318). One of the two will be used. Which one is undefined.
objc[1439]: Class GtkApplicationQuartzDelegate is implemented in both /usr/local/Cellar/gtk+3/3.24.43/lib/libgtk-3.0.dylib (0x103a61e68) and /usr/local/Cellar/gtk4/4.16.5/lib/libgtk-4.1.dylib (0x111ed3340). One of the two will be used. Which one is undefined.
objc[1439]: Class GNSMenuItem is implemented in both /usr/local/Cellar/gtk+3/3.24.43/lib/libgtk-3.0.dylib (0x103a61eb8) and /usr/local/Cellar/gtk4/4.16.5/lib/libgtk-4.1.dylib (0x111ed3390). One of the two will be used. Which one is undefined.
objc[1439]: Class GNSMenu is implemented in both /usr/local/Cellar/gtk+3/3.24.43/lib/libgtk-3.0.dylib (0x103a61ee0) and /usr/local/Cellar/gtk4/4.16.5/lib/libgtk-4.1.dylib (0x111ed33b8). One of the two will be used. Which one is undefined.
objc[1439]: Class FilterComboBox is implemented in both /usr/local/Cellar/gtk+3/3.24.43/lib/libgtk-3.0.dylib (0x103a61f58) and /usr/local/Cellar/gtk4/4.16.5/lib/libgtk-4.1.dylib (0x111ed3430). One of the two will be used. Which one is undefined.
objc[1439]: Class gdkCoreCursor is implemented in both /usr/local/Cellar/gtk+3/3.24.43/lib/libgdk-3.0.dylib (0x102848688) and /usr/local/Cellar/gtk4/4.16.5/lib/libgtk-4.1.dylib (0x111ed3480). One of the two will be used. Which one is undefined.
FIX:
export GTK_PATH=/usr/local/Cellar/gtk+3/3.24.43/lib
export GTK_PATH=/usr/local/Cellar/gtk4/4.16.5/lib
Exporting the paths fixed error and I was able to remote in.