Skip to content

Instantly share code, notes, and snippets.

@tomdaley92
Last active March 27, 2024 18:51
Show Gist options
  • Save tomdaley92/789688fc68e77477d468f7b9e59af51c to your computer and use it in GitHub Desktop.
Save tomdaley92/789688fc68e77477d468f7b9e59af51c to your computer and use it in GitHub Desktop.
Proxmox - SPICE Client setup for MacOS

Proxmox - SPICE client setup for MacOS

  1. 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
  2. Once that's installed should be able make a call remote-viewer with a pve-spice.vv file downloaded from proxmox web interface

    remote-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.

Improving Quality of Life

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.

  1. Launch Automator and select Application from the dropdown list, when prompted.

    Screen Shot 2021-07-15 at 1 39 31 PM

  2. 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.

    Screen Shot 2021-07-15 at 2 13 01 PM

  3. 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.

    Screen Shot 2022-02-16 at 11 26 22 AM

  4. In Chrome, click on the small arrow on the list of downloads at the bottom, and select "Always open files of this type"

    Screen Shot 2021-07-15 at 2 02 46 PM

  5. 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

    Screen Shot 2021-07-15 at 2 05 57 PM

    Screen Shot 2021-07-15 at 4 42 21 PM

Enjoy!

#!/usr/bin/env bash
set -e
# needs pve-manager >= 3.1-44
usage() {
echo "Usage: $0 [-u <string>] [-p <string>] vmid [node [proxy]]"
echo
echo "-u username. Default root@pam"
echo "-p password. Default ''"
echo
echo "vmid: id for VM"
echo "node: Proxmox cluster node name"
echo "proxy: DNS or IP (use <node> as default)"
exit 1
}
PASSWORD=""
USERNAME=""
while getopts ":u:p:" o; do
case "${o}" in
u)
USERNAME="${OPTARG}"
;;
p)
PASSWORD="${OPTARG}"
;;
*)
usage
;;
esac
done
shift $((OPTIND-1))
if [[ -z "$PASSWORD" ]]; then
PASSWORD=""
fi
if [[ -z "$USERNAME" ]]; then
USERNAME='root@pam'
fi
DEFAULTHOST="$(hostname -f)"
# select VM
[[ -z "$1" ]] && usage
VMID="$1"
#[[ -z "$2" ]] && usage
NODE="${2:-$DEFAULTHOST}"
if [[ -z "$3" ]]; then
PROXY="$NODE"
else
PROXY="$3"
fi
NODE="${NODE%%\.*}"
DATA="$(curl -f -s -S -k --data-urlencode "username=$USERNAME" --data-urlencode "password=$PASSWORD" "https://$PROXY:8006/api2/json/access/ticket")"
echo "AUTH OK"
TICKET="${DATA//\"/}"
TICKET="${TICKET##*ticket:}"
TICKET="${TICKET%%,*}"
TICKET="${TICKET%%\}*}"
CSRF="${DATA//\"/}"
CSRF="${CSRF##*CSRFPreventionToken:}"
CSRF="${CSRF%%,*}"
CSRF="${CSRF%%\}*}"
curl -f -s -S -k -b "PVEAuthCookie=$TICKET" -H "CSRFPreventionToken: $CSRF" "https://$PROXY:8006/api2/spiceconfig/nodes/$NODE/qemu/$VMID/spiceproxy" -d "proxy=$PROXY" > $NODE-$VMID.vv
exec remote-viewer $NODE-$VMID.vv
@tomdaley92
Copy link
Author

tomdaley92 commented Jun 2, 2022

@phocean just because the extension is missing, does not mean that the MIME type is not detectable. Try opening the file with a text editor, you'll see a sort of header for virt-viewer :)

https://support.mozilla.org/en-US/kb/change-firefox-behavior-when-open-file#w_file-types-and-download-actions

I'm assuming the first step is similar to my guide, you'll probably want to check "always download similar files" on a virt-viewer file:

Screen Shot 2022-06-02 at 9 04 08 AM

And then adjust this In your firefox preferences:

Screen Shot 2022-06-02 at 9 00 29 AM

@mdcarrier
Copy link

Thanks, @tomdaley92
Worked perfectly!

@pinkworld123
Copy link

Issue sound from linux guest (linux mint, Ubuntu) do not work

I have setup Proxmox - SPICE client for MacOS via brew

brew tap jeffreywildman/homebrew-virt-manager
brew install virt-viewer

I have checked on SPICE client for Linux plays sound but on SPICE client for MacOS, sound do not work. Can you please tell me how to fix it? thanks

@phocean
Copy link

phocean commented Jun 8, 2022

@tomdaley92 Thanks, but I don't understand what's going on. It worked for a while and stopped for some reason.
I think the issue is with Mac OS. Now I have a warning when I try to associate the files with the script :

Capture d’écran 2022-06-08 à 21 39 17

It complains that it does not have enough information to complete the association. If I proceed with it, it would associate the script only for that current file, but not the other files without extension...

EDIT : nevermind, I messed up with the script : I managed to get it work, at least in Firefox, not Mac OS

@mrl22
Copy link

mrl22 commented Aug 1, 2022

Thank you but I am struggling with a brew package issue

configure: error: Package requirements (spice-client-gtk-3.0 >= 0.35
                                     spice-client-glib-2.0 >= 0.35) were not met:

Package 'gobject-introspection-1.0', required by 'spice-client-glib-2.0', not found

@muse-sisay
Copy link

muse-sisay commented Aug 4, 2022

@tomdaley92 Is it possible to open multiple instances of the automator app/script?

i.e Is it possible to have two or more spice windows open at one time with the automator script? Currently, if you try to open a second remote spice connection while you have another session running; you have to quit the running spice session for it to open.

@picov
Copy link

picov commented Aug 14, 2022

Thank you but I am struggling with a brew package issue

configure: error: Package requirements (spice-client-gtk-3.0 >= 0.35
                                     spice-client-glib-2.0 >= 0.35) were not met:

Package 'gobject-introspection-1.0', required by 'spice-client-glib-2.0', not found

Same error here with both Intel and M1 Mac.
Th required package is already installed.

$ brew install gobject-introspection
Warning: gobject-introspection 1.72.0_1 is already installed and up-to-date.
To reinstall 1.72.0_1, run:
brew reinstall gobject-introspection

@rumochnaya
Copy link

Thank you but I am struggling with a brew package issue

configure: error: Package requirements (spice-client-gtk-3.0 >= 0.35
                                     spice-client-glib-2.0 >= 0.35) were not met:

Package 'gobject-introspection-1.0', required by 'spice-client-glib-2.0', not found

The same issue with MacBook Pro 2018 and macOS Monterey 12.4

@picov
Copy link

picov commented Aug 19, 2022

@leachimus
Copy link

Hello everyone!

I think the whole thing no longer works correctly under macOS Ventura. i get the following error:

==> Installing virt-viewer from jeffreywildman/virt-manager
Error: Your Command Line Tools (CLT) does not support macOS 13.
It is either outdated or was modified.
Please update your Command Line Tools (CLT) or delete it if no updates are available.
Update them from Software Update in System Preferences or run:
  softwareupdate --all --install --force

If that doesn't show you any updates, run:
  sudo rm -rf /Library/Developer/CommandLineTools
  sudo xcode-select --install

Alternatively, manually download them from:
  https://developer.apple.com/download/all/.
You should download the Command Line Tools for Xcode 14.1.

Have installed the latest Xcode. Can someone help me?

@leachimus
Copy link

OK, we are getting a little closer to the point now, but now I have this problem.

https://gist.github.com/tomdaley92/789688fc68e77477d468f7b9e59af51c?permalink_comment_id=4272624#gistcomment-4272624

@dedene
Copy link

dedene commented Nov 2, 2022

OK, we are getting a little closer to the point now, but now I have this problem.

https://gist.github.com/tomdaley92/789688fc68e77477d468f7b9e59af51c?permalink_comment_id=4272624#gistcomment-4272624

You can use https://github.com/Damenly/homebrew-virt-manager instead for virt-manager. Works fine under macOS Ventura using the latest Xcode 14.1

@bytemain
Copy link

bytemain commented Nov 9, 2022

use:

brew install damenly/virt-manager/virt-viewer

@TheDragon44
Copy link

I tried the instructions on this page first, and then brew install damenly/virt-manager/virt-viewer

Unfortunately both result in the same error -

Error: virt-viewer: Failed to download resource "virt-viewer"
Download failed: https://virt-manager.org/download/sources/virt-viewer/virt-viewer-11.0.tar.xz

Anyone know how to get around this?

@swhiteh4t
Copy link

I have the same error, the brew command is trying to fetch the package from this domain:
Download failed: https://virt-manager.org/download/sources/virt-viewer/virt-viewer-8.0.tar.gz
where the package is located at:
https://releases.pagure.org/virt-viewer/

I am gonna try an install it manually

@TheDragon44
Copy link

I have the same error, the brew command is trying to fetch the package from this domain: Download failed: https://virt-manager.org/download/sources/virt-viewer/virt-viewer-8.0.tar.gz where the package is located at: https://releases.pagure.org/virt-viewer/

I am gonna try an install it manually

Did you manage to get this working? If so any pointers would be much appreciated

@justinschuldt
Copy link

issue

Looks like the URIs of the virt-manager releases have changed, which has broken all the previously working brew scripts.

The virt-viewer package addresses in virt-viewer.rb now return 404s. They have changed to a new structure, from

https://virt-manager.org/download/sources/virt-viewer/...

to

https://releases.pagure.org/virt-viewer/...

fix

This updated virt-viewer.rb works for me on an M1 mac running macOS Ventura 13.1:

brew tap justinschuldt/homebrew-virt-manager
brew install virt-viewer

https://github.com/justinschuldt/homebrew-virt-manager

fyi @TheDragon44 @swhiteh4t

@fskale
Copy link

fskale commented Mar 4, 2023

Virt-{manager,viewer} and Remote are heavily dependend on various packages.
Remote viewer bottled and then rebuild from source always terminates when building TLS connection (spice and VNC).
I rebuild the whole toolchest from scratch using jhbuild but soon started over and compiled alle the packages using bleeding edge source code. (x86_64 build) There were a lot of bugs, and i patched the source heavily to get compiled under OSX 12.6.
The only thing that doesn't work is the autostart by using a .vv file.
The arguments won't be added to the ARGV so it won't start automatically, but will be added to the connection list: (open -a RemoteViewer.app --args console.vv works !)
I would appreciate to provide the DMG for testing !
It works with OSX 12.6 (X86_64).
The metal integration and multi screen integration works for me (tested using two monitors)
Here the screenshots !
Best Franz

Open with don't provide the ARGV
Bildschirmfoto 2023-03-04 um 14 58 46

Connection list
Bildschirmfoto 2023-03-04 um 14 59 18

Working connection
Bildschirmfoto 2023-03-04 um 15 00 28

@uamarchuan
Copy link

@fskale Hi Franz,
Can you share your DMG file with me for tests?
Thanks

@martibi
Copy link

martibi commented Apr 7, 2023

I'm facing a different sort of issue. Whenever I try to run the .vv file via remote-viewer it returns with this error: Unsupported graphics type 'spice' error. A quick search indicates that this is due to spice-gtk being excluded. I am using https://github.com/jeffreywildman/homebrew-virt-manager which already includes spice-gtk so not sure what is wrong. I am using macOS 12.6 Monterey on Intel Core.

$ sw_vers
ProductName:	macOS
ProductVersion:	12.6
BuildVersion:	21G115

$ remote-viewer --version
remote-viewer version 11.0
$ remote-viewer -v --debug Unknown-24
(remote-viewer:90666): virt-viewer-DEBUG: 11:29:10.442: keymap string is empty - nothing to do

(remote-viewer:90666): virt-viewer-WARNING **: 11:29:10.463: (../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)

(remote-viewer:90666): virt-viewer-WARNING **: 11:29:10.463: (../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)

(remote-viewer:90666): virt-viewer-WARNING **: 11:29:10.463: (../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)

(remote-viewer:90666): virt-viewer-WARNING **: 11:29:10.463: (../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)

(remote-viewer:90666): virt-viewer-WARNING **: 11:29:10.463: (../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)

(remote-viewer:90666): virt-viewer-WARNING **: 11:29:10.463: (../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)
(remote-viewer:90666): virt-viewer-DEBUG: 11:29:10.985: Opening display to Unknown-24
(remote-viewer:90666): virt-viewer-DEBUG: 11:29:10.986: Guest (null) has unsupported spice display type
Guest (null) has unsupported spice display type

@martibi
Copy link

martibi commented Apr 7, 2023

I'm facing a different sort of issue. Whenever I try to run the .vv file via remote-viewer it returns with this error: Unsupported graphics type 'spice' error. A quick search indicates that this is due to spice-gtk being excluded. I am using https://github.com/jeffreywildman/homebrew-virt-manager which already includes spice-gtk so not sure what is wrong. I am using macOS 12.6 Monterey on Intel Core.

This fixed the issue jeffreywildman/homebrew-virt-manager#200 (comment) basically depends_on "gobject-introspection" had to be added

@ted1735
Copy link

ted1735 commented May 11, 2023

Working perfectly!!!

@Makishima
Copy link

Search for shell and drag to the right. The contents:
/usr/local/bin/remote-viewer "$@"

For me it is /opt/homebrew/bin/remote-viewer "$@"

@Mimiz06
Copy link

Mimiz06 commented Sep 13, 2023

hello !! im newbie, and have this error when trying to lunch the command remote-viewer console.vv
(remote-viewer:75521): Gtk-WARNING **: 11:47:56.382: cannot open display
i'm under MAC M1 Pro 12.6
thanks for help

@jfberry
Copy link

jfberry commented Dec 20, 2023

This is excellent... and working well. But when I try and open a second connection it blocks until the first is closed. this is probably a tick box somewhere to get it to launch a new instance rather than use an existing one, but I don't know where to look!

@julian4646
Copy link

julian4646 commented Jan 18, 2024

working great (OSX M1 Ventura 13.6.2) - the only issue I have is my Proxmox is not handing out the spice file with a "vv" extension - it gives no extension - so i have to do something like this in terminal: remote-viewer XXrTt33t

any one know how to get Proxmox to supply the shortcut file with a .vv ext ?

EDIT FIXED - works fine with Chrome (not ffox)

@ballo
Copy link

ballo commented Jan 24, 2024

Hello. I'm a little confused as to what systems this can target. The bundle definitely fails to execute on an old PowerPC system.

@sbussard
Copy link

Who else is here because the new version of TrueNAS Scale comes with a SPICE client with a bad user experience?

@boretom
Copy link

boretom commented Jan 28, 2024

This is excellent... and working well. But when I try and open a second connection it blocks until the first is closed. this is probably a tick box somewhere to get it to launch a new instance rather than use an existing one, but I don't know where to look!

Same here and it tool me way to long to find the right search query to solve it ... but I got there:

You have to start the script in the background (that was clear to me) and redirect the stdout and stderr output to /dev/null otherwise the Applescript will wait until the script exits:

If using 'Run Shell Script' (Pass input : as arguments)

/opt/homebrew/bin/remote-viewer "$@" &> /dev/null &

If using 'Run AppleScript':

on run {input, parameters}
	set f to POSIX path of (input as text)
	do shell script "/opt/homebrew/bin/remote-viewer" & " '" & f & "' &> /dev/null &"
end run

Both ways work for me on a Macbook Air M2 with Firefox 122.0

References to where I got it from:

@jfberry
Copy link

jfberry commented Jan 28, 2024

This is excellent... and working well. But when I try and open a second connection it blocks until the first is closed. this is probably a tick box somewhere to get it to launch a new instance rather than use an existing one, but I don't know where to look!

Same here and it tool me way to long to find the right search query to solve it ... but I got there:

I experimented with this for ages, including ending up a few times with thousands of processes being executed and taking my whole machine down. Thanks for persevering!

@eskerda
Copy link

eskerda commented Jan 29, 2024

Via script, easier and more secure access can be granted by using an API token instead of generating the cookie with the username and password

Create API Token

Go to pool view / datacenter / API Tokens / Add
Select user / Add token ID / Either disable privilage separation or grant ["perm","/vms/{vmid}",["VM.Console"]]

Sample

Set host, node, vm-id, and token accordingly.
Token looks like user@realm!some-key-id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

remote-viewer <(
    curl "https://$HOST:8006/api2/spiceconfig/nodes/$NODE/qemu/$VMID/spiceproxy" \
         -H "Authorization: PVEAPIToken=$TOKEN" \
         -d "proxy=$HOST" \
         -f -s -S -k
)

Here's a simple cli tool I made for my setup https://github.com/eskerda/px

@ropelletier
Copy link

Ran into this error when installing virt-viewer "Error: Too many open files - /usr/bin/xcrun clang"

The fix was this command:

ulimit -Sn 512

Maybe add this to your instructions. Thank you very much, this was extremely helpful.

@uamarchuan
Copy link

Somebody knows how to pack virt-viewer to the app file with all necessary dependencies?
Any instructions or bash scripts for that?
like this one:
http://people.freedesktop.org/~teuf/spice-gtk-osx/dmg/0.5.7/RemoteViewer-0.5.7-1.dmg

@fskale
Copy link

fskale commented Feb 5, 2024

Hi, i forgot about this particular thread ;-)
If i use the provides taps (homebrew), the app cannot open encrypted connections.
I gladly would provide my self compiled app but how ?
I don't wann run into license issues…

@fskale
Copy link

fskale commented Feb 6, 2024

Hi again,
i uploaded the App on my private cloud:
https://wolke.dah.am/s/pbK73ZAXxpaskis
It's compiled only for x86_64.
The porting to AARCH64 is work in progress (>= 20%) . (Many header files must be patched)
Tested OS: 12.x and 13.x x86_64
Please report back.

@uamarchuan
Copy link

Please report back.

Hi Fskale,
Thanks for sharing, for me it works. I have old MacBook Air with the latest Sonoma 14.3.

@fskale
Copy link

fskale commented Feb 6, 2024

Please report back.

Hi Fskale, Thanks for sharing, for me it works. I have old MacBook Air with the latest Sonoma 14.3.

Did you try multi monitoring as well ?
It took me several weeks to get a compiled binary. (metal framework etc.)

@uamarchuan
Copy link

yes, there seems to be no problem with multi-monitoring... I turn on the second monitor and can move firefox to the other display
Screenshot 2024-02-06 at 19 55 11
I can do several tests for you on my mac, just let me know.

@fskale
Copy link

fskale commented Feb 6, 2024

Is the mouse in sync ?
If i connect to an ovirt 4.3 vm using encryption and the spice protocol, my mouse is not in sync.
But this could be because of the nature of the spice protocol compatibility issues and "ancient" ovirt 4.3 ;-)

@uamarchuan
Copy link

I don't have problem with mouse sync.
What I've noticed that share clipboard is not work properly. From Spice to host I can copy but from host to Spice not :(

@fskale
Copy link

fskale commented Feb 10, 2024

I don't have problem with mouse sync. What I've noticed that share clipboard is not work properly. From Spice to host I can copy but from host to Spice not :(

For that to work, you've to install spice-vdagent.
Docs:
https://www.spice-space.org/spice-user-manual.html#agent

@fskale
Copy link

fskale commented Feb 11, 2024

Today i started my "cross compile challenge" for arm64e support.
About 30% done so far. (base and dep libs)
Will keep you informed…

@maximko
Copy link

maximko commented Feb 28, 2024

Please report back.

Thank you, works for me on Ventura but crash happens when I copy text inside vm:
Gdk:ERROR:../../../../spice-jhbuild/source/gtk+-3.24.36/gdk/quartz/gdkeventloop-quartz.c:585:select_thread_collect_poll: assertion failed: (ufds[i].fd == current_pollfds[i].fd) Bail out! Gdk:ERROR:../../../../spice-jhbuild/source/gtk+-3.24.36/gdk/quartz/gdkeventloop-quartz.c:585:select_thread_collect_poll: assertion failed: (ufds[i].fd == current_pollfds[i].fd) RemoteViewer.app/Contents/MacOS/RemoteViewer: line 107: 82349 Abort trap: 6 "$bundle_contents/MacOS/$name-bin" "$@" $EXTRA_ARGS
Also clipboard sharing from macos to guest doesn't work.

@fskale
Copy link

fskale commented Feb 28, 2024

Since the assertion failed, there must a problem with the poll syscall in the vda agent plugin.
Are you using the vda agent in the vm ?
Check using dmesg on the vm side if there's a segfault…
Same issue already reported: jeffreywildman/homebrew-virt-manager#204
I will test it on my own, but not until next week…
I'm quite busy at the moment…

@fskale
Copy link

fskale commented Feb 28, 2024

There are some patch which could be applied to gtk+ version 3.24.
There were some changes to the UI in gdkevents-quartz.c.
Not sure when i've time for that to patch, compile and test. (takes a lot of time ;-) )

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment