Skip to content

Instantly share code, notes, and snippets.

@tomdaley92
Last active April 7, 2024 07:18
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
@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