diff --git a/build/linux/dist/arduino-add-groups b/build/linux/dist/arduino-add-groups
new file mode 100755
index 0000000..1f27e51
--- /dev/null
+++ b/build/linux/dist/arduino-add-groups
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+uid=${PKEXEC_UID:-${SUDO_UID}}
+
+if [[ -z $uid ]]; then
+ echo "Could not determine which user to add to the groups."
+ exit 2
+fi
+
+login=$(perl -e 'print((getpwuid shift)[0])' $uid)
+
+for group in dialout lock; do
+ if ! groups $login | grep -q " : .*\b$group\b"; then
+ missing_groups=${missing_groups:+$missing_groups,}$group
+ fi
+done
+
+if [[ -n $missing_groups ]]; then
+ exec usermod -a -G $missing_groups $login
+else
+ echo "No required groups are missing for this user."
+ exit 1
+fi
diff --git a/build/linux/dist/cc.arduino.add-groups.policy b/build/linux/dist/cc.arduino.add-groups.policy
new file mode 100644
index 0000000..197d5ee
--- /dev/null
+++ b/build/linux/dist/cc.arduino.add-groups.policy
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE policyconfig PUBLIC
+"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
+"http://www.freedesktop.rg/standards/PolicyKit/1/policyconfig.dtd">
+<policyconfig>
+
+ <vendor>Arduino</vendor>
+ <vendor_url>http://arduino.cc/</vendor_url>
+
+ <action id="cc.arduino.add-groups.policy">
+ <description>Add the user to groups required to access USB and serial ports.</description>
+ <message>Authentication is required to add the current user to the required groups.</message>
+ <icon_name>arduino</icon_name>
+ <defaults>
+ <allow_any>no</allow_any>
+ <allow_inactive>no</allow_inactive>
+ <allow_active>auth_admin</allow_active>
+ </defaults>
+ <annotate key="org.freedesktop.policykit.exec.path">/usr/libexec/arduino-add-groups</annotate>
+ </action>
+
+</policyconfig>