[lxc-devel] [lxd/master] Allow specifying user, group and cwd during exec

stgraber on Github lxc-bot at linuxcontainers.org
Tue Jul 9 21:32:11 UTC 2019


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 323 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20190709/535f4044/attachment-0001.bin>
-------------- next part --------------
From aad608f9c589ce255f5643dfdb34af2bac8827cd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 9 Jul 2019 16:18:01 -0400
Subject: [PATCH 1/8] api: Add container_exec_user extension
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 doc/api-extensions.md | 3 +++
 shared/version/api.go | 1 +
 2 files changed, 4 insertions(+)

diff --git a/doc/api-extensions.md b/doc/api-extensions.md
index 19d87dfd04..d617d8afa3 100644
--- a/doc/api-extensions.md
+++ b/doc/api-extensions.md
@@ -795,3 +795,6 @@ Rework the resources API at /1.0/resources, especially:
    - Export device names and nodes in DRM struct
    - Export device name and node in NVIDIA struct
    - Add SR-IOV VF tracking
+
+## container\_exec\_user\_group\_cwd
+Adds support for specifiying User, Group and Cwd during `POST /1.0/containers/NAME/exec`.
diff --git a/shared/version/api.go b/shared/version/api.go
index 85a9037433..4b785c0f5a 100644
--- a/shared/version/api.go
+++ b/shared/version/api.go
@@ -158,6 +158,7 @@ var APIExtensions = []string{
 	"storage_cephfs",
 	"container_nic_ipfilter",
 	"resources_v2",
+	"container_exec_user_group_cwd",
 }
 
 // APIExtensionsCount returns the number of available API extensions.

From a3a94949db6c758fa9c7942be2ac9c56720c7576 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 9 Jul 2019 17:27:45 -0400
Subject: [PATCH 2/8] client: Add user, group and cwd exec
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 client/lxd_containers.go | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/client/lxd_containers.go b/client/lxd_containers.go
index 4f459f8ced..e4701d6cf6 100644
--- a/client/lxd_containers.go
+++ b/client/lxd_containers.go
@@ -702,6 +702,12 @@ func (r *ProtocolLXD) ExecContainer(containerName string, exec api.ContainerExec
 		}
 	}
 
+	if exec.User > 0 || exec.Group > 0 || exec.Cwd != "" {
+		if !r.HasExtension("container_exec_user_group_cwd") {
+			return nil, fmt.Errorf("The server is missing the required \"container_exec_user_group_cwd\" API extension")
+		}
+	}
+
 	// Send the request
 	op, _, err := r.queryOperation("POST", fmt.Sprintf("/containers/%s/exec", url.QueryEscape(containerName)), exec, "")
 	if err != nil {

From 24e7fead92722eee88a6f83bf06949693403e025 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 9 Jul 2019 17:28:20 -0400
Subject: [PATCH 3/8] doc/rest-api: Add new fields to exec
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 doc/rest-api.md | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/doc/rest-api.md b/doc/rest-api.md
index 8b54d42a8c..0d21286740 100644
--- a/doc/rest-api.md
+++ b/doc/rest-api.md
@@ -836,6 +836,9 @@ Input (run bash):
         "interactive": true,            # Whether to allocate a pts device instead of PIPEs
         "width": 80,                    # Initial width of the terminal (optional)
         "height": 25,                   # Initial height of the terminal (optional)
+        "user": 1000,                   # User to run the command as (optional)
+        "group: 1000,                   # Group to run the command as (optional)
+        "cwd": "/tmp"                   # Current working directory (optional)
     }
 
 `wait-for-websocket` indicates whether the operation should block and wait for

From 872df51450e5eaed12844470c3cb5271a625d9c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 9 Jul 2019 17:28:33 -0400
Subject: [PATCH 4/8] lxc/exec: Add user, group and cwd
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxc/exec.go | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/lxc/exec.go b/lxc/exec.go
index db041b921f..2ec320f3b5 100644
--- a/lxc/exec.go
+++ b/lxc/exec.go
@@ -29,6 +29,9 @@ type cmdExec struct {
 	flagForceInteractive    bool
 	flagForceNonInteractive bool
 	flagDisableStdin        bool
+	flagUser                uint32
+	flagGroup               uint32
+	flagCwd                 string
 }
 
 func (c *cmdExec) Command() *cobra.Command {
@@ -53,6 +56,9 @@ Mode defaults to non-interactive, interactive mode is selected if both stdin AND
 	cmd.Flags().BoolVarP(&c.flagForceInteractive, "force-interactive", "t", false, i18n.G("Force pseudo-terminal allocation"))
 	cmd.Flags().BoolVarP(&c.flagForceNonInteractive, "force-noninteractive", "T", false, i18n.G("Disable pseudo-terminal allocation"))
 	cmd.Flags().BoolVarP(&c.flagDisableStdin, "disable-stdin", "n", false, i18n.G("Disable stdin (reads from /dev/null)"))
+	cmd.Flags().Uint32Var(&c.flagUser, "user", 0, i18n.G("User ID to run the command as (default 0)")+"``")
+	cmd.Flags().Uint32Var(&c.flagGroup, "group", 0, i18n.G("Group ID to run the command as (default 0)")+"``")
+	cmd.Flags().StringVar(&c.flagCwd, "cwd", "", i18n.G("Group ID to run the command as (default /root)"))
 
 	return cmd
 }
@@ -191,6 +197,9 @@ func (c *cmdExec) Run(cmd *cobra.Command, args []string) error {
 		Environment: env,
 		Width:       width,
 		Height:      height,
+		User:        c.flagUser,
+		Group:       c.flagGroup,
+		Cwd:         c.flagCwd,
 	}
 
 	execArgs := lxd.ContainerExecArgs{

From 11c39f6bb73336ace771058fdbe32e672de591ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 9 Jul 2019 17:28:49 -0400
Subject: [PATCH 5/8] shared/api: Extend ContainerExecPost
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 shared/api/container_exec.go | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/shared/api/container_exec.go b/shared/api/container_exec.go
index e243749b43..7e724dc49f 100644
--- a/shared/api/container_exec.go
+++ b/shared/api/container_exec.go
@@ -18,4 +18,9 @@ type ContainerExecPost struct {
 
 	// API extension: container_exec_recording
 	RecordOutput bool `json:"record-output" yaml:"record-output"`
+
+	// API extension: container_user_group_cwd
+	User  uint32 `json:"user" yaml:"user"`
+	Group uint32 `json:"group" yaml:"group"`
+	Cwd   string `json:"cwd" yaml:"cwd"`
 }

From ac065057367bedf0ad563677c58bca47cf4b451c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 9 Jul 2019 17:29:11 -0400
Subject: [PATCH 6/8] lxd/containers: Add uid, gid and cwd to exec
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/container.go      |  2 +-
 lxd/container_exec.go | 36 +++++++++++++++++++++++-------------
 lxd/container_lxc.go  | 13 +++++++++++--
 lxd/main_forkexec.go  | 28 ++++++++++++++++++++++------
 4 files changed, 57 insertions(+), 22 deletions(-)

diff --git a/lxd/container.go b/lxd/container.go
index 86d0ab447e..4a729c46c3 100644
--- a/lxd/container.go
+++ b/lxd/container.go
@@ -684,7 +684,7 @@ type container interface {
 	         *      (the PID returned in the first return argument). It can however
 	         *      be used to e.g. forward signals.)
 	*/
-	Exec(command []string, env map[string]string, stdin *os.File, stdout *os.File, stderr *os.File, wait bool) (*exec.Cmd, int, int, error)
+	Exec(command []string, env map[string]string, stdin *os.File, stdout *os.File, stderr *os.File, wait bool, cwd string, uid uint32, gid uint32) (*exec.Cmd, int, int, error)
 
 	// Status
 	Render() (interface{}, interface{}, error)
diff --git a/lxd/container_exec.go b/lxd/container_exec.go
index 117ba2ffc5..e53fad8727 100644
--- a/lxd/container_exec.go
+++ b/lxd/container_exec.go
@@ -43,6 +43,9 @@ type execWs struct {
 	fds              map[int]string
 	width            int
 	height           int
+	uid              uint32
+	gid              uint32
+	cwd              string
 }
 
 func (s *execWs) Metadata() interface{} {
@@ -308,7 +311,7 @@ func (s *execWs) Do(op *operation) error {
 		return cmdErr
 	}
 
-	cmd, _, attachedPid, err := s.container.Exec(s.command, s.env, stdin, stdout, stderr, false)
+	cmd, _, attachedPid, err := s.container.Exec(s.command, s.env, stdin, stdout, stderr, false, s.cwd, s.uid, s.gid)
 	if err != nil {
 		return err
 	}
@@ -406,19 +409,22 @@ func containerExecPost(d *Daemon, r *http.Request) Response {
 		}
 	}
 
-	// Set default value for HOME
-	_, ok = env["HOME"]
-	if !ok {
-		env["HOME"] = "/root"
-	}
+	// If running as root, set some env variables
+	if post.User == 0 {
+		// Set default value for HOME
+		_, ok = env["HOME"]
+		if !ok {
+			env["HOME"] = "/root"
+		}
 
-	// Set default value for USER
-	_, ok = env["USER"]
-	if !ok {
-		env["USER"] = "root"
+		// Set default value for USER
+		_, ok = env["USER"]
+		if !ok {
+			env["USER"] = "root"
+		}
 	}
 
-	// Set default value for USER
+	// Set default value for LANG
 	_, ok = env["LANG"]
 	if !ok {
 		env["LANG"] = "C.UTF-8"
@@ -461,6 +467,10 @@ func containerExecPost(d *Daemon, r *http.Request) Response {
 		ws.width = post.Width
 		ws.height = post.Height
 
+		ws.cwd = post.Cwd
+		ws.uid = post.User
+		ws.gid = post.Group
+
 		resources := map[string][]string{}
 		resources["containers"] = []string{ws.container.Name()}
 
@@ -492,7 +502,7 @@ func containerExecPost(d *Daemon, r *http.Request) Response {
 			defer stderr.Close()
 
 			// Run the command
-			_, cmdResult, _, cmdErr = c.Exec(post.Command, env, nil, stdout, stderr, true)
+			_, cmdResult, _, cmdErr = c.Exec(post.Command, env, nil, stdout, stderr, true, post.Cwd, post.User, post.Group)
 
 			// Update metadata with the right URLs
 			metadata["return"] = cmdResult
@@ -501,7 +511,7 @@ func containerExecPost(d *Daemon, r *http.Request) Response {
 				"2": fmt.Sprintf("/%s/containers/%s/logs/%s", version.APIVersion, c.Name(), filepath.Base(stderr.Name())),
 			}
 		} else {
-			_, cmdResult, _, cmdErr = c.Exec(post.Command, env, nil, nil, nil, true)
+			_, cmdResult, _, cmdErr = c.Exec(post.Command, env, nil, nil, nil, true, post.Cwd, post.User, post.Group)
 			metadata["return"] = cmdResult
 		}
 
diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go
index 0aa1e2a187..c7acd5d0ae 100644
--- a/lxd/container_lxc.go
+++ b/lxd/container_lxc.go
@@ -6933,7 +6933,7 @@ func (c *containerLXC) ConsoleLog(opts lxc.ConsoleLogOptions) (string, error) {
 	return string(msg), nil
 }
 
-func (c *containerLXC) Exec(command []string, env map[string]string, stdin *os.File, stdout *os.File, stderr *os.File, wait bool) (*exec.Cmd, int, int, error) {
+func (c *containerLXC) Exec(command []string, env map[string]string, stdin *os.File, stdout *os.File, stderr *os.File, wait bool, cwd string, uid uint32, gid uint32) (*exec.Cmd, int, int, error) {
 	// Prepare the environment
 	envSlice := []string{}
 
@@ -6950,7 +6950,16 @@ func (c *containerLXC) Exec(command []string, env map[string]string, stdin *os.F
 
 	// Prepare the subcommand
 	cname := projectPrefix(c.Project(), c.Name())
-	args := []string{c.state.OS.ExecPath, "forkexec", cname, c.state.OS.LxcPath, filepath.Join(c.LogPath(), "lxc.conf")}
+	args := []string{
+		c.state.OS.ExecPath,
+		"forkexec",
+		cname,
+		c.state.OS.LxcPath,
+		filepath.Join(c.LogPath(), "lxc.conf"),
+		cwd,
+		fmt.Sprintf("%d", uid),
+		fmt.Sprintf("%d", gid),
+	}
 
 	args = append(args, "--")
 	args = append(args, "env")
diff --git a/lxd/main_forkexec.go b/lxd/main_forkexec.go
index 515c782260..43197370a0 100644
--- a/lxd/main_forkexec.go
+++ b/lxd/main_forkexec.go
@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"fmt"
 	"os"
+	"strconv"
 	"strings"
 
 	"github.com/spf13/cobra"
@@ -18,7 +19,7 @@ type cmdForkexec struct {
 func (c *cmdForkexec) Command() *cobra.Command {
 	// Main subcommand
 	cmd := &cobra.Command{}
-	cmd.Use = "forkexec <container name> <containers path> <config> -- env [key=value...] -- cmd <args...>"
+	cmd.Use = "forkexec <container name> <containers path> <config> <cwd> <uid> <gid> -- env [key=value...] -- cmd <args...>"
 	cmd.Short = "Execute a task inside the container"
 	cmd.Long = `Description:
   Execute a task inside the container
@@ -34,7 +35,7 @@ func (c *cmdForkexec) Command() *cobra.Command {
 
 func (c *cmdForkexec) Run(cmd *cobra.Command, args []string) error {
 	// Sanity checks
-	if len(args) < 4 {
+	if len(args) < 7 {
 		cmd.Help()
 
 		if len(args) == 0 {
@@ -44,13 +45,23 @@ func (c *cmdForkexec) Run(cmd *cobra.Command, args []string) error {
 		return fmt.Errorf("Missing required arguments")
 	}
 
+	// Only root should run this
+	if os.Geteuid() != 0 {
+		return fmt.Errorf("This must be run as root")
+	}
+
 	name := args[0]
 	lxcpath := args[1]
 	configPath := args[2]
+	cwd := args[3]
+	uid, err := strconv.ParseUint(args[4], 10, 32)
+	if err != nil {
+		return err
+	}
 
-	// Only root should run this
-	if os.Geteuid() != 0 {
-		return fmt.Errorf("This must be run as root")
+	gid, err := strconv.ParseUint(args[5], 10, 32)
+	if err != nil {
+		return err
 	}
 
 	// Get the status
@@ -74,13 +85,15 @@ func (c *cmdForkexec) Run(cmd *cobra.Command, args []string) error {
 	opts.StdinFd = 3
 	opts.StdoutFd = 4
 	opts.StderrFd = 5
+	opts.UID = int(uid)
+	opts.GID = int(gid)
 
 	// Parse the command line
 	env := []string{}
 	command := []string{}
 
 	section := ""
-	for _, arg := range args[3:] {
+	for _, arg := range args[6:] {
 		// The "cmd" section must come last as it may contain a --
 		if arg == "--" && section != "cmd" {
 			section = ""
@@ -106,6 +119,9 @@ func (c *cmdForkexec) Run(cmd *cobra.Command, args []string) error {
 	}
 
 	opts.Env = env
+	if cwd != "" {
+		opts.Cwd = cwd
+	}
 
 	// Exec the command
 	status, err := d.RunCommandNoWait(command, opts)

From acbf9b18ef281e001502a97d0133bca6c54dce50 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 9 Jul 2019 17:29:34 -0400
Subject: [PATCH 7/8] tests: Add tests for uid, gid and cwd exec
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 test/suites/basic.sh | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/test/suites/basic.sh b/test/suites/basic.sh
index fd80141424..29dfe6d64b 100644
--- a/test/suites/basic.sh
+++ b/test/suites/basic.sh
@@ -320,6 +320,16 @@ test_basic_usage() {
   lxc list last-used-at-test  --format json | jq -r '.[].last_used_at' | grep -v '1970-01-01T00:00:00Z'
   lxc delete last-used-at-test --force
 
+  # Test user, group and cwd
+  lxc exec foo -- mkdir /blah
+  [ "$(lxc exec foo --user 1000 -- id -u)" = "1000" ] || false
+  [ "$(lxc exec foo --group 1000 -- id -g)" = "1000" ] || false
+  [ "$(lxc exec foo --cwd /blah -- pwd)" = "/blah" ] || false
+
+  [ "$(lxc exec foo --user 1234 --group 5678 --cwd /blah -- id -u)" = "1234" ] || false
+  [ "$(lxc exec foo --user 1234 --group 5678 --cwd /blah -- id -g)" = "5678" ] || false
+  [ "$(lxc exec foo --user 1234 --group 5678 --cwd /blah -- pwd)" = "/blah" ] || false
+
   # check that we can set the environment
   lxc exec foo pwd | grep /root
   lxc exec --env BEST_BAND=meshuggah foo env | grep meshuggah

From 041acf8459fbdf5c4eb3d6359c57bd59c83285a3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 9 Jul 2019 17:29:55 -0400
Subject: [PATCH 8/8] i18n: Update translation templates
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 po/de.po      | 36 ++++++++++++++++++++++++------------
 po/el.po      | 36 ++++++++++++++++++++++++------------
 po/es.po      | 36 ++++++++++++++++++++++++------------
 po/fa.po      | 36 ++++++++++++++++++++++++------------
 po/fi.po      | 36 ++++++++++++++++++++++++------------
 po/fr.po      | 36 ++++++++++++++++++++++++------------
 po/hi.po      | 36 ++++++++++++++++++++++++------------
 po/id.po      | 36 ++++++++++++++++++++++++------------
 po/it.po      | 36 ++++++++++++++++++++++++------------
 po/ja.po      | 36 ++++++++++++++++++++++++------------
 po/ko.po      | 36 ++++++++++++++++++++++++------------
 po/lxd.pot    | 36 ++++++++++++++++++++++++------------
 po/nb_NO.po   | 36 ++++++++++++++++++++++++------------
 po/nl.po      | 36 ++++++++++++++++++++++++------------
 po/pa.po      | 36 ++++++++++++++++++++++++------------
 po/pl.po      | 36 ++++++++++++++++++++++++------------
 po/pt_BR.po   | 36 ++++++++++++++++++++++++------------
 po/ru.po      | 36 ++++++++++++++++++++++++------------
 po/sr.po      | 36 ++++++++++++++++++++++++------------
 po/sv.po      | 36 ++++++++++++++++++++++++------------
 po/tr.po      | 36 ++++++++++++++++++++++++------------
 po/uk.po      | 36 ++++++++++++++++++++++++------------
 po/zh_Hans.po | 36 ++++++++++++++++++++++++------------
 23 files changed, 552 insertions(+), 276 deletions(-)

diff --git a/po/de.po b/po/de.po
index b283b25477..f8a0479f02 100644
--- a/po/de.po
+++ b/po/de.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LXD\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: 2018-11-30 03:10+0000\n"
 "Last-Translator: ssantos <ssantos at web.de>\n"
 "Language-Team: German <https://hosted.weblate.org/projects/linux-containers/"
@@ -989,7 +989,7 @@ msgstr "Kein Zertifikat für diese Verbindung"
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -1076,11 +1076,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1191,7 +1191,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1208,11 +1208,11 @@ msgstr "Fehler beim hinzufügen des Alias %s\n"
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 #, fuzzy
 msgid ""
 "Execute commands in containers\n"
@@ -1321,7 +1321,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr "Fingerabdruck: %s\n"
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1436,6 +1436,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2307,7 +2315,7 @@ msgstr "Profil %s gelöscht\n"
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3333,6 +3341,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3388,11 +3400,11 @@ msgstr "Zustand des laufenden Containers sichern oder nicht"
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 #, fuzzy
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr "kann nicht zum selben Container Namen kopieren"
@@ -3686,7 +3698,7 @@ msgstr ""
 msgid "error: %v"
 msgstr "Fehler: %v\n"
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/el.po b/po/el.po
index 3764150aa0..c1d069fdaf 100644
--- a/po/el.po
+++ b/po/el.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: 2017-02-14 08:00+0000\n"
 "Last-Translator: Simos Xenitellis <simos.65 at gmail.com>\n"
 "Language-Team: Greek <https://hosted.weblate.org/projects/linux-containers/"
@@ -824,7 +824,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -907,11 +907,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1020,7 +1020,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1037,11 +1037,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1139,7 +1139,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1251,6 +1251,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2075,7 +2083,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3054,6 +3062,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3106,11 +3118,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3369,7 +3381,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/es.po b/po/es.po
index df34359ce1..5c15c45562 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: 2019-06-13 16:56+0000\n"
 "Last-Translator: Alonso José Lara Plana <alonso.lara.plana at gmail.com>\n"
 "Language-Team: Spanish <https://hosted.weblate.org/projects/linux-containers/"
@@ -900,7 +900,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -983,11 +983,11 @@ msgstr "Cacheado: %s"
 msgid "Directory import is not available on this platform"
 msgstr "El directorio importado no está disponible en esta plataforma"
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1095,7 +1095,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1112,11 +1112,11 @@ msgstr "Error actualizando el archivo de plantilla: %s"
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1216,7 +1216,7 @@ msgstr "El filtrado no está soportado aún"
 msgid "Fingerprint: %s"
 msgstr "Huella dactilar: %s"
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1328,6 +1328,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2154,7 +2162,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3133,6 +3141,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3185,11 +3197,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3450,7 +3462,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/fa.po b/po/fa.po
index b525ffdb35..baa2585a2a 100644
--- a/po/fa.po
+++ b/po/fa.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -820,7 +820,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -903,11 +903,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1013,7 +1013,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1030,11 +1030,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1132,7 +1132,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1244,6 +1244,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2065,7 +2073,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3044,6 +3052,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3096,11 +3108,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3359,7 +3371,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/fi.po b/po/fi.po
index 2901105ec3..f8b547a3b3 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -820,7 +820,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -903,11 +903,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1013,7 +1013,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1030,11 +1030,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1132,7 +1132,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1244,6 +1244,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2065,7 +2073,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3044,6 +3052,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3096,11 +3108,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3359,7 +3371,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/fr.po b/po/fr.po
index 8cac090890..c410eba5a9 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LXD\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: 2019-01-04 18:07+0000\n"
 "Last-Translator: Deleted User <noreply+12102 at weblate.org>\n"
 "Language-Team: French <https://hosted.weblate.org/projects/linux-containers/"
@@ -991,7 +991,7 @@ msgstr "Copie de l'image : %s"
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -1074,11 +1074,11 @@ msgstr "Serveur distant : %s"
 msgid "Directory import is not available on this platform"
 msgstr "L'importation de répertoire n'est pas disponible sur cette plateforme"
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr "Désactiver l'allocation pseudo-terminal"
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr "Désactiver stdin (lecture à partir de /dev/null)"
 
@@ -1191,7 +1191,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr "Variable d'environnement (de la forme HOME=/home/foo) à positionner"
 
@@ -1208,11 +1208,11 @@ msgstr "Erreur de mise à jour du modèle de fichier : %s"
 msgid "Event type to listen for"
 msgstr "Type d'évènements à surveiller"
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 #, fuzzy
 msgid ""
 "Execute commands in containers\n"
@@ -1326,7 +1326,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr "Empreinte : %s"
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr "Forcer l'allocation d'un pseudo-terminal"
 
@@ -1443,6 +1443,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 #, fuzzy
 msgid "HOSTNAME"
@@ -2375,7 +2383,7 @@ msgstr "Le réseau %s a été supprimé"
 msgid "Override the source project"
 msgstr "impossible de supprimer le serveur distant par défaut"
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr "Surcharger le mode terminal (auto, interactif ou non-interactif)"
 
@@ -3423,6 +3431,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr "Publié : %s"
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 #, fuzzy
 msgid "User aborted delete operation"
@@ -3479,11 +3491,11 @@ msgstr "Réaliser ou pas l'instantané de l'état de fonctionnement du conteneur
 msgid "YES"
 msgstr "OUI"
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr "Il est impossible de passer -t et -T simultanément"
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 #, fuzzy
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr "impossible de copier vers le même nom de conteneur"
@@ -3787,7 +3799,7 @@ msgstr "activé"
 msgid "error: %v"
 msgstr "erreur : %v"
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/hi.po b/po/hi.po
index 00cd451512..bc4086a3ce 100644
--- a/po/hi.po
+++ b/po/hi.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -820,7 +820,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -903,11 +903,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1013,7 +1013,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1030,11 +1030,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1132,7 +1132,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1244,6 +1244,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2065,7 +2073,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3044,6 +3052,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3096,11 +3108,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3359,7 +3371,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/id.po b/po/id.po
index 181f0d9bf5..46dfa909b9 100644
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -820,7 +820,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -903,11 +903,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1013,7 +1013,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1030,11 +1030,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1132,7 +1132,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1244,6 +1244,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2065,7 +2073,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3044,6 +3052,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3096,11 +3108,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3359,7 +3371,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/it.po b/po/it.po
index 4c49b3e04b..4efa68122d 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: 2017-08-18 14:22+0000\n"
 "Last-Translator: Alberto Donato <alberto.donato at gmail.com>\n"
 "Language-Team: Italian <https://hosted.weblate.org/projects/linux-containers/"
@@ -864,7 +864,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -947,11 +947,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr "Import da directory non disponibile su questa piattaforma"
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1059,7 +1059,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1076,11 +1076,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1181,7 +1181,7 @@ msgstr "'%s' non è un tipo di file supportato."
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1293,6 +1293,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2123,7 +2131,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3108,6 +3116,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3160,11 +3172,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3426,7 +3438,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/ja.po b/po/ja.po
index 6da7f6ea2d..c6a13a6c75 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LXD\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: 2019-05-18 08:49+0000\n"
 "Last-Translator: KATOH Yasufumi <karma at jazz.email.ne.jp>\n"
 "Language-Team: Japanese <https://hosted.weblate.org/projects/linux-"
@@ -846,7 +846,7 @@ msgstr "ストレージボリュームを削除します"
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -929,11 +929,11 @@ msgstr "リモート名: %s"
 msgid "Directory import is not available on this platform"
 msgstr "このプラットフォーム上ではディレクトリのインポートは利用できません"
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr "擬似端末の割り当てを無効にします"
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr "標準入力を無効にします (/dev/null から読み込みます)"
 
@@ -1053,7 +1053,7 @@ msgstr ""
 "  これは 'lxc config get core.https_address' コマンドでチェックできます。\n"
 "  まだ使用可能でない場合は、アドレスを設定することもできます。"
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr "環境変数を設定します (例: HOME=/home/foo)"
 
@@ -1070,11 +1070,11 @@ msgstr "テンプレートファイル更新のエラー: %s"
 msgid "Event type to listen for"
 msgstr "Listenするイベントタイプ"
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr "コンテナ内でコマンドを実行します"
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1186,7 +1186,7 @@ msgstr "情報表示のフィルタリングはまだサポートされていま
 msgid "Fingerprint: %s"
 msgstr "証明書のフィンガープリント: %s"
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr "強制的に擬似端末を割り当てます"
 
@@ -1298,6 +1298,14 @@ msgstr "ストレージプールの設定値を取得します"
 msgid "Get values for storage volume configuration keys"
 msgstr "ストレージボリュームの設定値を取得します"
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2236,7 +2244,7 @@ msgstr "バックグラウンド操作 %s を削除しました"
 msgid "Override the source project"
 msgstr "プロジェクトを指定します"
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr "ターミナルモードを上書きします (auto, interactive, non-interactive)"
 
@@ -3238,6 +3246,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr "アップロード日時: %s"
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr "ユーザが削除操作を中断しました"
@@ -3293,11 +3305,11 @@ msgstr "コンテナの稼動状態のスナップショットを取得するか
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr "-t と -T は同時に指定できません"
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr "--mode と同時に -t または -T は指定できません"
 
@@ -3562,7 +3574,7 @@ msgstr "有効"
 msgid "error: %v"
 msgstr "エラー: %v"
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/ko.po b/po/ko.po
index 30b99eb876..5d1f2ff5d9 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -820,7 +820,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -903,11 +903,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1013,7 +1013,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1030,11 +1030,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1132,7 +1132,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1244,6 +1244,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2065,7 +2073,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3044,6 +3052,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3096,11 +3108,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3359,7 +3371,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/lxd.pot b/po/lxd.pot
index c0a5ff5612..4131644d06 100644
--- a/po/lxd.pot
+++ b/po/lxd.pot
@@ -7,7 +7,7 @@
 msgid   ""
 msgstr  "Project-Id-Version: lxd\n"
         "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-        "POT-Creation-Date: 2019-07-05 10:42-0400\n"
+        "POT-Creation-Date: 2019-07-09 17:29-0400\n"
         "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
         "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
         "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -778,7 +778,7 @@ msgstr  ""
 msgid   "Delete storage volumes"
 msgstr  ""
 
-#: lxc/action.go:31 lxc/action.go:50 lxc/action.go:70 lxc/action.go:91 lxc/alias.go:23 lxc/alias.go:55 lxc/alias.go:99 lxc/alias.go:147 lxc/alias.go:198 lxc/cluster.go:29 lxc/cluster.go:66 lxc/cluster.go:149 lxc/cluster.go:199 lxc/cluster.go:249 lxc/cluster.go:334 lxc/config.go:31 lxc/config.go:90 lxc/config.go:373 lxc/config.go:454 lxc/config.go:566 lxc/config.go:685 lxc/config_device.go:24 lxc/config_device.go:76 lxc/config_device.go:182 lxc/config_device.go:255 lxc/config_device.go:321 lxc/config_device.go:410 lxc/config_device.go:500 lxc/config_device.go:589 lxc/config_device.go:657 lxc/config_metadata.go:28 lxc/config_metadata.go:53 lxc/config_metadata.go:175 lxc/config_template.go:29 lxc/config_template.go:66 lxc/config_template.go:109 lxc/config_template.go:151 lxc/config_template.go:235 lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59 lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32 lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31 lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187 lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264 lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792 lxc/image.go:906 lxc/image.go:1236 lxc/image.go:1313 lxc/image_alias.go:26 lxc/image_alias.go:59 lxc/image_alias.go:106 lxc/image_alias.go:149 lxc/image_alias.go:250 lxc/import.go:28 lxc/info.go:32 lxc/init.go:35 lxc/launch.go:23 lxc/list.go:48 lxc/main.go:50 lxc/manpage.go:19 lxc/monitor.go:30 lxc/move.go:37 lxc/network.go:34 lxc/network.go:110 lxc/network.go:183 lxc/network.go:256 lxc/network.go:328 lxc/network.go:378 lxc/network.go:463 lxc/network.go:548 lxc/network.go:671 lxc/network.go:729 lxc/network.go:809 lxc/network.go:929 lxc/network.go:1004 lxc/network.go:1054 lxc/network.go:1123 lxc/network.go:1185 lxc/operation.go:25 lxc/operation.go:54 lxc/operation.go:101 lxc/operation.go:186 lxc/profile.go:31 lxc/profile.go:103 lxc/profile.go:166 lxc/profile.go:246 lxc/profile.go:302 lxc/profile.go:356 lxc/profile.go:406 lxc/profile.go:530 lxc/profile.go:579 lxc/profile.go:677 lxc/profile.go:753 lxc/profile.go:803 lxc/profile.go:862 lxc/profile.go:916 lxc/project.go:29 lxc/project.go:86 lxc/project.go:151 lxc/project.go:214 lxc/project.go:334 lxc/project.go:382 lxc/project.go:471 lxc/project.go:526 lxc/project.go:586 lxc/project.go:615 lxc/project.go:668 lxc/publish.go:35 lxc/query.go:30 lxc/remote.go:37 lxc/remote.go:88 lxc/remote.go:416 lxc/remote.go:452 lxc/remote.go:568 lxc/remote.go:630 lxc/remote.go:680 lxc/remote.go:718 lxc/rename.go:21 lxc/restore.go:24 lxc/snapshot.go:24 lxc/storage.go:33 lxc/storage.go:89 lxc/storage.go:163 lxc/storage.go:213 lxc/storage.go:333 lxc/storage.go:388 lxc/storage.go:506 lxc/storage.go:588 lxc/storage.go:660 lxc/storage.go:744 lxc/storage_volume.go:33 lxc/storage_volume.go:140 lxc/storage_volume.go:219 lxc/storage_volume.go:302 lxc/storage_volume.go:463 lxc/storage_volume.go:540 lxc/storage_volume.go:616 lxc/storage_volume.go:698 lxc/storage_volume.go:779 lxc/storage_volume.go:979 lxc/storage_volume.go:1068 lxc/storage_volume.go:1147 lxc/storage_volume.go:1178 lxc/storage_volume.go:1281 lxc/storage_volume.go:1358 lxc/storage_volume.go:1457 lxc/storage_volume.go:1488 lxc/storage_volume.go:1559 lxc/version.go:22
+#: lxc/action.go:31 lxc/action.go:50 lxc/action.go:70 lxc/action.go:91 lxc/alias.go:23 lxc/alias.go:55 lxc/alias.go:99 lxc/alias.go:147 lxc/alias.go:198 lxc/cluster.go:29 lxc/cluster.go:66 lxc/cluster.go:149 lxc/cluster.go:199 lxc/cluster.go:249 lxc/cluster.go:334 lxc/config.go:31 lxc/config.go:90 lxc/config.go:373 lxc/config.go:454 lxc/config.go:566 lxc/config.go:685 lxc/config_device.go:24 lxc/config_device.go:76 lxc/config_device.go:182 lxc/config_device.go:255 lxc/config_device.go:321 lxc/config_device.go:410 lxc/config_device.go:500 lxc/config_device.go:589 lxc/config_device.go:657 lxc/config_metadata.go:28 lxc/config_metadata.go:53 lxc/config_metadata.go:175 lxc/config_template.go:29 lxc/config_template.go:66 lxc/config_template.go:109 lxc/config_template.go:151 lxc/config_template.go:235 lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59 lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32 lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31 lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187 lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264 lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792 lxc/image.go:906 lxc/image.go:1236 lxc/image.go:1313 lxc/image_alias.go:26 lxc/image_alias.go:59 lxc/image_alias.go:106 lxc/image_alias.go:149 lxc/image_alias.go:250 lxc/import.go:28 lxc/info.go:32 lxc/init.go:35 lxc/launch.go:23 lxc/list.go:48 lxc/main.go:50 lxc/manpage.go:19 lxc/monitor.go:30 lxc/move.go:37 lxc/network.go:34 lxc/network.go:110 lxc/network.go:183 lxc/network.go:256 lxc/network.go:328 lxc/network.go:378 lxc/network.go:463 lxc/network.go:548 lxc/network.go:671 lxc/network.go:729 lxc/network.go:809 lxc/network.go:929 lxc/network.go:1004 lxc/network.go:1054 lxc/network.go:1123 lxc/network.go:1185 lxc/operation.go:25 lxc/operation.go:54 lxc/operation.go:101 lxc/operation.go:186 lxc/profile.go:31 lxc/profile.go:103 lxc/profile.go:166 lxc/profile.go:246 lxc/profile.go:302 lxc/profile.go:356 lxc/profile.go:406 lxc/profile.go:530 lxc/profile.go:579 lxc/profile.go:677 lxc/profile.go:753 lxc/profile.go:803 lxc/profile.go:862 lxc/profile.go:916 lxc/project.go:29 lxc/project.go:86 lxc/project.go:151 lxc/project.go:214 lxc/project.go:334 lxc/project.go:382 lxc/project.go:471 lxc/project.go:526 lxc/project.go:586 lxc/project.go:615 lxc/project.go:668 lxc/publish.go:35 lxc/query.go:30 lxc/remote.go:37 lxc/remote.go:88 lxc/remote.go:416 lxc/remote.go:452 lxc/remote.go:568 lxc/remote.go:630 lxc/remote.go:680 lxc/remote.go:718 lxc/rename.go:21 lxc/restore.go:24 lxc/snapshot.go:24 lxc/storage.go:33 lxc/storage.go:89 lxc/storage.go:163 lxc/storage.go:213 lxc/storage.go:333 lxc/storage.go:388 lxc/storage.go:506 lxc/storage.go:588 lxc/storage.go:660 lxc/storage.go:744 lxc/storage_volume.go:33 lxc/storage_volume.go:140 lxc/storage_volume.go:219 lxc/storage_volume.go:302 lxc/storage_volume.go:463 lxc/storage_volume.go:540 lxc/storage_volume.go:616 lxc/storage_volume.go:698 lxc/storage_volume.go:779 lxc/storage_volume.go:979 lxc/storage_volume.go:1068 lxc/storage_volume.go:1147 lxc/storage_volume.go:1178 lxc/storage_volume.go:1281 lxc/storage_volume.go:1358 lxc/storage_volume.go:1457 lxc/storage_volume.go:1488 lxc/storage_volume.go:1559 lxc/version.go:22
 msgid   "Description"
 msgstr  ""
 
@@ -827,11 +827,11 @@ msgstr  ""
 msgid   "Directory import is not available on this platform"
 msgstr  ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid   "Disable pseudo-terminal allocation"
 msgstr  ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid   "Disable stdin (reads from /dev/null)"
 msgstr  ""
 
@@ -933,7 +933,7 @@ msgid   "Enable clustering on a single non-clustered LXD instance\n"
         "  for the address if not yet set."
 msgstr  ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid   "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr  ""
 
@@ -950,11 +950,11 @@ msgstr  ""
 msgid   "Event type to listen for"
 msgstr  ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid   "Execute commands in containers"
 msgstr  ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid   "Execute commands in containers\n"
         "\n"
         "The command is executed directly using exec, so there is no shell and\n"
@@ -1048,7 +1048,7 @@ msgstr  ""
 msgid   "Fingerprint: %s"
 msgstr  ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid   "Force pseudo-terminal allocation"
 msgstr  ""
 
@@ -1154,6 +1154,14 @@ msgstr  ""
 msgid   "Get values for storage volume configuration keys"
 msgstr  ""
 
+#: lxc/exec.go:61
+msgid   "Group ID to run the command as (default /root)"
+msgstr  ""
+
+#: lxc/exec.go:60
+msgid   "Group ID to run the command as (default 0)"
+msgstr  ""
+
 #: lxc/network.go:978
 msgid   "HOSTNAME"
 msgstr  ""
@@ -1937,7 +1945,7 @@ msgstr  ""
 msgid   "Override the source project"
 msgstr  ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid   "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr  ""
 
@@ -2902,6 +2910,10 @@ msgstr  ""
 msgid   "Used: %v"
 msgstr  ""
 
+#: lxc/exec.go:59
+msgid   "User ID to run the command as (default 0)"
+msgstr  ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid   "User aborted delete operation"
 msgstr  ""
@@ -2950,11 +2962,11 @@ msgstr  ""
 msgid   "YES"
 msgstr  ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid   "You can't pass -t and -T at the same time"
 msgstr  ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid   "You can't pass -t or -T at the same time as --mode"
 msgstr  ""
 
@@ -3207,7 +3219,7 @@ msgstr  ""
 msgid   "error: %v"
 msgstr  ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid   "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr  ""
 
diff --git a/po/nb_NO.po b/po/nb_NO.po
index dfb7b38748..b18f1f948c 100644
--- a/po/nb_NO.po
+++ b/po/nb_NO.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -820,7 +820,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -903,11 +903,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1013,7 +1013,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1030,11 +1030,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1132,7 +1132,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1244,6 +1244,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2065,7 +2073,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3044,6 +3052,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3096,11 +3108,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3359,7 +3371,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/nl.po b/po/nl.po
index b8894e85f6..73fdd62897 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: 2019-02-26 09:18+0000\n"
 "Last-Translator: Heimen Stoffels <vistausss at outlook.com>\n"
 "Language-Team: Dutch <https://hosted.weblate.org/projects/linux-containers/"
@@ -869,7 +869,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -952,11 +952,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1062,7 +1062,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1079,11 +1079,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1181,7 +1181,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1293,6 +1293,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2114,7 +2122,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3093,6 +3101,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3145,11 +3157,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3408,7 +3420,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/pa.po b/po/pa.po
index 0f98d3031c..3b1c42f79b 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -820,7 +820,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -903,11 +903,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1013,7 +1013,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1030,11 +1030,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1132,7 +1132,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1244,6 +1244,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2065,7 +2073,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3044,6 +3052,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3096,11 +3108,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3359,7 +3371,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/pl.po b/po/pl.po
index becbba8b2e..9b976e8b77 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: 2018-09-08 19:22+0000\n"
 "Last-Translator: m4sk1n <me at m4sk.in>\n"
 "Language-Team: Polish <https://hosted.weblate.org/projects/linux-containers/"
@@ -869,7 +869,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -952,11 +952,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1062,7 +1062,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1079,11 +1079,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1181,7 +1181,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1293,6 +1293,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2114,7 +2122,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3093,6 +3101,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3145,11 +3157,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3408,7 +3420,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 0054a73e2c..08c2436c7a 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: 2019-06-22 17:19+0000\n"
 "Last-Translator: Renato dos Santos <shazaum at gmail.com>\n"
 "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
@@ -950,7 +950,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -1033,11 +1033,11 @@ msgstr "Em cache: %s"
 msgid "Directory import is not available on this platform"
 msgstr "A importação de diretório não está disponível nessa plataforma"
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr "Desabilitar alocação de pseudo-terminal"
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr "Desabilitar stdin (ler de /dev/null)"
 
@@ -1146,7 +1146,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1163,11 +1163,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1265,7 +1265,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1378,6 +1378,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2199,7 +2207,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3180,6 +3188,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3232,11 +3244,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3495,7 +3507,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/ru.po b/po/ru.po
index ac33d4e656..4b82b5b232 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: 2018-06-22 15:57+0000\n"
 "Last-Translator: Александр Киль <shorrey at gmail.com>\n"
 "Language-Team: Russian <https://hosted.weblate.org/projects/linux-containers/"
@@ -943,7 +943,7 @@ msgstr "Копирование образа: %s"
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -1026,11 +1026,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1140,7 +1140,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1157,11 +1157,11 @@ msgstr "Копирование образа: %s"
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1262,7 +1262,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1374,6 +1374,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2212,7 +2220,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3202,6 +3210,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3254,11 +3266,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3546,7 +3558,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/sr.po b/po/sr.po
index 4833a7953b..30f450eec4 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -820,7 +820,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -903,11 +903,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1013,7 +1013,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1030,11 +1030,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1132,7 +1132,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1244,6 +1244,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2065,7 +2073,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3044,6 +3052,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3096,11 +3108,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3359,7 +3371,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/sv.po b/po/sv.po
index 93a2e8ae63..ecd7b03899 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -820,7 +820,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -903,11 +903,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1013,7 +1013,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1030,11 +1030,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1132,7 +1132,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1244,6 +1244,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2065,7 +2073,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3044,6 +3052,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3096,11 +3108,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3359,7 +3371,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/tr.po b/po/tr.po
index c0dc174536..c9dfac1e4f 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -820,7 +820,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -903,11 +903,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1013,7 +1013,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1030,11 +1030,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1132,7 +1132,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1244,6 +1244,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2065,7 +2073,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3044,6 +3052,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3096,11 +3108,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3359,7 +3371,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/uk.po b/po/uk.po
index 00b012c9e3..bd13605a2e 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -820,7 +820,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -903,11 +903,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1013,7 +1013,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1030,11 +1030,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1132,7 +1132,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1244,6 +1244,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2065,7 +2073,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3044,6 +3052,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3096,11 +3108,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3359,7 +3371,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 
diff --git a/po/zh_Hans.po b/po/zh_Hans.po
index e3c757e0a3..fe247bcf62 100644
--- a/po/zh_Hans.po
+++ b/po/zh_Hans.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2019-07-05 10:42-0400\n"
+"POT-Creation-Date: 2019-07-09 17:29-0400\n"
 "PO-Revision-Date: 2018-09-11 19:15+0000\n"
 "Last-Translator: 0x0916 <w at laoqinren.net>\n"
 "Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
@@ -823,7 +823,7 @@ msgstr ""
 #: lxc/config_template.go:151 lxc/config_template.go:235
 #: lxc/config_template.go:297 lxc/config_trust.go:30 lxc/config_trust.go:59
 #: lxc/config_trust.go:115 lxc/config_trust.go:197 lxc/console.go:32
-#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:38 lxc/export.go:31
+#: lxc/copy.go:40 lxc/delete.go:30 lxc/exec.go:41 lxc/export.go:31
 #: lxc/file.go:42 lxc/file.go:75 lxc/file.go:124 lxc/file.go:187
 #: lxc/file.go:377 lxc/image.go:41 lxc/image.go:130 lxc/image.go:264
 #: lxc/image.go:315 lxc/image.go:438 lxc/image.go:578 lxc/image.go:792
@@ -906,11 +906,11 @@ msgstr ""
 msgid "Directory import is not available on this platform"
 msgstr ""
 
-#: lxc/exec.go:54
+#: lxc/exec.go:57
 msgid "Disable pseudo-terminal allocation"
 msgstr ""
 
-#: lxc/exec.go:55
+#: lxc/exec.go:58
 msgid "Disable stdin (reads from /dev/null)"
 msgstr ""
 
@@ -1016,7 +1016,7 @@ msgid ""
 "  for the address if not yet set."
 msgstr ""
 
-#: lxc/exec.go:51
+#: lxc/exec.go:54
 msgid "Environment variable to set (e.g. HOME=/home/foo)"
 msgstr ""
 
@@ -1033,11 +1033,11 @@ msgstr ""
 msgid "Event type to listen for"
 msgstr ""
 
-#: lxc/exec.go:37
+#: lxc/exec.go:40
 msgid "Execute commands in containers"
 msgstr ""
 
-#: lxc/exec.go:38
+#: lxc/exec.go:41
 msgid ""
 "Execute commands in containers\n"
 "\n"
@@ -1135,7 +1135,7 @@ msgstr ""
 msgid "Fingerprint: %s"
 msgstr ""
 
-#: lxc/exec.go:53
+#: lxc/exec.go:56
 msgid "Force pseudo-terminal allocation"
 msgstr ""
 
@@ -1247,6 +1247,14 @@ msgstr ""
 msgid "Get values for storage volume configuration keys"
 msgstr ""
 
+#: lxc/exec.go:61
+msgid "Group ID to run the command as (default /root)"
+msgstr ""
+
+#: lxc/exec.go:60
+msgid "Group ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/network.go:978
 msgid "HOSTNAME"
 msgstr ""
@@ -2068,7 +2076,7 @@ msgstr ""
 msgid "Override the source project"
 msgstr ""
 
-#: lxc/exec.go:52
+#: lxc/exec.go:55
 msgid "Override the terminal mode (auto, interactive or non-interactive)"
 msgstr ""
 
@@ -3047,6 +3055,10 @@ msgstr ""
 msgid "Used: %v"
 msgstr ""
 
+#: lxc/exec.go:59
+msgid "User ID to run the command as (default 0)"
+msgstr ""
+
 #: lxc/cluster.go:280 lxc/delete.go:47
 msgid "User aborted delete operation"
 msgstr ""
@@ -3099,11 +3111,11 @@ msgstr ""
 msgid "YES"
 msgstr ""
 
-#: lxc/exec.go:99
+#: lxc/exec.go:105
 msgid "You can't pass -t and -T at the same time"
 msgstr ""
 
-#: lxc/exec.go:103
+#: lxc/exec.go:109
 msgid "You can't pass -t or -T at the same time as --mode"
 msgstr ""
 
@@ -3362,7 +3374,7 @@ msgstr ""
 msgid "error: %v"
 msgstr ""
 
-#: lxc/exec.go:36
+#: lxc/exec.go:39
 msgid "exec [<remote>:]<container> [flags] [--] <command line>"
 msgstr ""
 


More information about the lxc-devel mailing list