Add an option to disable Tart clipboard sharing (#475)

Expose noClipboard in VM creation, CLI inspection, and the API schema.
Pass --no-clipboard to Tart when requested. Clipboard sharing remains
enabled by default for existing VM specifications.
This commit is contained in:
Yibo Zhuang
2026-09-01 21:32:55 +01:00
committed by GitHub
parent cc2c0fd034
commit 28c0dd37b4
5 changed files with 13 additions and 0 deletions
+4
View File
@@ -747,6 +747,10 @@ components:
type: boolean type: boolean
description: Whether to disable audio pass-through to the host description: Whether to disable audio pass-through to the host
default: false default: false
noClipboard:
type: boolean
description: Whether to disable clipboard sharing between host and guest
default: false
username: username:
type: string type: string
description: SSH username to use when connecting to a VM description: SSH username to use when connecting to a VM
+3
View File
@@ -29,6 +29,7 @@ var netBridged string
var headless bool var headless bool
var nested bool var nested bool
var noAudio bool var noAudio bool
var noClipboard bool
var suspendable bool var suspendable bool
var username string var username string
var password string var password string
@@ -72,6 +73,7 @@ func newCreateVMCommand() *cobra.Command {
command.Flags().BoolVar(&headless, "headless", true, "whether to run without graphics") command.Flags().BoolVar(&headless, "headless", true, "whether to run without graphics")
command.Flags().BoolVar(&nested, "nested", false, "enable nested virtualization") command.Flags().BoolVar(&nested, "nested", false, "enable nested virtualization")
command.Flags().BoolVar(&noAudio, "no-audio", false, "disable audio pass-through to the host") command.Flags().BoolVar(&noAudio, "no-audio", false, "disable audio pass-through to the host")
command.Flags().BoolVar(&noClipboard, "no-clipboard", false, "disable clipboard sharing between host and guest")
command.Flags().BoolVar(&suspendable, "suspendable", false, "treat the VM as suspendable, "+ command.Flags().BoolVar(&suspendable, "suspendable", false, "treat the VM as suspendable, "+
"disabling certain devices for suspendability support and issuing \"tart suspend\" instead of \"tart stop\" "+ "disabling certain devices for suspendability support and issuing \"tart suspend\" instead of \"tart stop\" "+
"when VM's specification is updated, thus preserving the VM's state between specification generations") "when VM's specification is updated, thus preserving the VM's state between specification generations")
@@ -159,6 +161,7 @@ func runCreateVM(cmd *cobra.Command, args []string) error {
Headless: headless, Headless: headless,
Nested: nested, Nested: nested,
NoAudio: noAudio, NoAudio: noAudio,
NoClipboard: noClipboard,
Username: username, Username: username,
Password: password, Password: password,
RandomSerial: randomSerial, RandomSerial: randomSerial,
+1
View File
@@ -99,6 +99,7 @@ func runGetVM(cmd *cobra.Command, args []string) error {
table.AddRow("Headless mode", vm.Headless) table.AddRow("Headless mode", vm.Headless)
table.AddRow("Nested virtualization", vm.Nested) table.AddRow("Nested virtualization", vm.Nested)
table.AddRow("Audio disabled", vm.NoAudio) table.AddRow("Audio disabled", vm.NoAudio)
table.AddRow("Clipboard sharing disabled", vm.NoClipboard)
table.AddRow("Status", vm.Status) table.AddRow("Status", vm.Status)
table.AddRow("Status message", vm.StatusMessage) table.AddRow("Status message", vm.StatusMessage)
table.AddRow("Assigned worker", nonEmptyOrNone(vm.Worker)) table.AddRow("Assigned worker", nonEmptyOrNone(vm.Worker))
+4
View File
@@ -307,6 +307,10 @@ func (vm *VM) run(ctx context.Context, eventStreamer *client.EventStreamer) {
runArgs = append(runArgs, "--no-audio") runArgs = append(runArgs, "--no-audio")
} }
if vm.resource.NoClipboard {
runArgs = append(runArgs, "--no-clipboard")
}
if vm.resource.Suspendable { if vm.resource.Suspendable {
runArgs = append(runArgs, "--suspendable") runArgs = append(runArgs, "--suspendable")
} }
+1
View File
@@ -33,6 +33,7 @@ type VM struct {
Headless bool `json:"headless,omitempty"` Headless bool `json:"headless,omitempty"`
Nested bool `json:"nested,omitempty"` Nested bool `json:"nested,omitempty"`
NoAudio bool `json:"noAudio,omitempty"` NoAudio bool `json:"noAudio,omitempty"`
NoClipboard bool `json:"noClipboard,omitempty"`
VMSpec VMSpec
VMSpecReadOnly VMSpecReadOnly