diff --git a/build.py b/build.py
index cdca16645..5be59503c 100755
--- a/build.py
+++ b/build.py
@@ -71,7 +71,7 @@ def make_parser():
parser.add_argument(
'--hwcodec',
action='store_true',
- help='Enable feature hwcodec, windows only.'
+ help='Enable feature hwcodec'
)
return parser
@@ -124,26 +124,28 @@ def get_features(args):
def build_flutter_deb(version):
os.chdir('flutter')
+ os.system('/bin/rm -rf tmpdeb/')
os.system('dpkg-deb -R rustdesk.deb tmpdeb')
- # os.system('flutter build linux --release')
+ os.system('flutter build linux --release')
os.system('rm tmpdeb/usr/bin/rustdesk')
- os.system('strip build/linux/x64/release/liblibrustdesk.so')
os.system('mkdir -p tmpdeb/usr/lib/rustdesk')
os.system('mkdir -p tmpdeb/usr/share/rustdesk/files/systemd/')
+ os.system('mkdir -p tmpdeb/usr/share/polkit-1/actions')
os.system(
'cp -r build/linux/x64/release/bundle/* tmpdeb/usr/lib/rustdesk/')
os.system(
'pushd tmpdeb && ln -s /usr/lib/rustdesk/flutter_hbb usr/bin/rustdesk && popd')
os.system(
- 'cp build/linux/x64/release/liblibrustdesk.so tmpdeb/usr/lib/rustdesk/librustdesk.so')
+ 'cp ../rustdesk.service tmpdeb/usr/share/rustdesk/files/systemd/')
os.system(
- 'cp rustdesk.service tmpdeb/usr/share/rustdesk/files/systemd/')
- os.system(
- 'cp rustdesk.service.user tmpdeb/usr/share/rustdesk/files/systemd/')
+ 'cp ../rustdesk.service.user tmpdeb/usr/share/rustdesk/files/systemd/')
os.system(
'cp ../128x128@2x.png tmpdeb/usr/share/rustdesk/files/rustdesk.png')
os.system(
- 'cp rustdesk.desktop tmpdeb/usr/share/applications/rustdesk.desktop')
+ 'cp ../rustdesk.desktop tmpdeb/usr/share/applications/rustdesk.desktop')
+ os.system(
+ 'cp ../com.rustdesk.RustDesk.policy tmpdeb/usr/share/polkit-1/actions/')
+ os.system("echo \"#!/bin/sh\" >> tmpdeb/usr/share/rustdesk/files/polkit && chmod a+x tmpdeb/usr/share/rustdesk/files/polkit")
os.system('mkdir -p tmpdeb/DEBIAN')
os.system('cp -a ../DEBIAN/* tmpdeb/DEBIAN/')
md5_file('usr/share/rustdesk/files/systemd/rustdesk.service')
diff --git a/com.rustdesk.RustDesk.policy b/com.rustdesk.RustDesk.policy
new file mode 100644
index 000000000..a77223120
--- /dev/null
+++ b/com.rustdesk.RustDesk.policy
@@ -0,0 +1,22 @@
+
+
+
+ RustDesk
+ https://rustdesk.com/
+ rustdesk
+
+ Change RustDesk options
+ Authentication is required to change RustDesk options
+ 要更改RustDesk选项, 需要您先通过身份验证
+ 要變更RustDesk選項, 需要您先通過身份驗證
+ /usr/share/rustdesk/files/polkit
+ true
+
+ auth_admin
+ auth_admin
+ auth_admin
+
+
+
diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart
index 9aae9dc29..effc26b39 100644
--- a/flutter/lib/desktop/pages/desktop_setting_page.dart
+++ b/flutter/lib/desktop/pages/desktop_setting_page.dart
@@ -265,22 +265,14 @@ class _GeneralState extends State<_General> {
if (devices.isEmpty) {
return const Offstage();
}
- List keys = devices.toList();
- List values = devices.toList();
- // TODO
- if (!devices.contains(currentDevice)) {
- currentDevice = "";
- keys.insert(0, currentDevice);
- values.insert(0, 'default');
- }
return _Card(title: 'Audio Input Device', children: [
- _ComboBox(
- keys: keys,
- values: values,
- initialKey: currentDevice,
- onChanged: (key) {
- setDevice(key);
- }).marginOnly(left: _kContentHMargin),
+ ...devices.map((device) => _Radio(context,
+ value: device,
+ groupValue: currentDevice,
+ label: device, onChanged: (value) {
+ setDevice(value);
+ setState(() {});
+ }))
]);
});
}
@@ -876,6 +868,8 @@ Widget _Radio(BuildContext context,
Radio(value: value, groupValue: groupValue, onChanged: onChange),
Expanded(
child: Text(translate(label),
+ maxLines: 1,
+ overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: _kContentFontSize,
color: _disabledTextColor(context, enabled)))
diff --git a/src/platform/linux.rs b/src/platform/linux.rs
index fe2673832..89e2d296d 100644
--- a/src/platform/linux.rs
+++ b/src/platform/linux.rs
@@ -638,7 +638,13 @@ pub fn quit_gui() {
}
pub fn check_super_user_permission() -> ResultType {
- // TODO: replace echo with a rustdesk's program, which is location-fixed and non-gui.
- let status = std::process::Command::new("pkexec").arg("echo").status()?;
+ let file = "/usr/share/rustdesk/files/polkit";
+ let arg;
+ if std::path::Path::new(file).is_file() {
+ arg = file;
+ } else {
+ arg = "echo";
+ }
+ let status = std::process::Command::new("pkexec").arg(arg).status()?;
Ok(status.success() && status.code() == Some(0))
}