add polkit for custom authentication && update build.rs

Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
21pages 2022-09-13 18:10:20 +08:00
parent 64f5f3253c
commit 203d9e39a0
3 changed files with 40 additions and 10 deletions

View File

@ -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')

View File

@ -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.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>
<vendor>RustDesk</vendor>
<vendor_url>https://rustdesk.com/</vendor_url>
<icon_name>rustdesk</icon_name>
<action id="com.rustdesk.RustDesk.options">
<description>Change RustDesk options</description>
<message>Authentication is required to change RustDesk options</message>
<message xml:lang="zh_CN">要更改RustDesk选项, 需要您先通过身份验证</message>
<message xml:lang="zh_TW">要變更RustDesk選項, 需要您先通過身份驗證</message>
<annotate key="org.freedesktop.policykit.exec.path">/usr/share/rustdesk/files/polkit</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
<defaults>
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
</defaults>
</action>
</policyconfig>

View File

@ -638,7 +638,13 @@ pub fn quit_gui() {
}
pub fn check_super_user_permission() -> ResultType<bool> {
// 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))
}