Merge pull request #224 from desertstsung/addfun/relogin_xorg
add function
This commit is contained in:
commit
c5f1222476
@ -12,6 +12,7 @@ use std::{
|
|||||||
type Xdo = *const c_void;
|
type Xdo = *const c_void;
|
||||||
|
|
||||||
pub const PA_SAMPLE_RATE: u32 = 24000;
|
pub const PA_SAMPLE_RATE: u32 = 24000;
|
||||||
|
static mut UNMODIFIED: bool = true;
|
||||||
|
|
||||||
thread_local! {
|
thread_local! {
|
||||||
static XDO: RefCell<Xdo> = RefCell::new(unsafe { xdo_new(std::ptr::null()) });
|
static XDO: RefCell<Xdo> = RefCell::new(unsafe { xdo_new(std::ptr::null()) });
|
||||||
@ -432,6 +433,72 @@ pub fn fix_login_wayland() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn current_is_wayland() -> bool {
|
||||||
|
let dtype = get_display_server();
|
||||||
|
return "wayland" == dtype && unsafe{UNMODIFIED};
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn modify_default_login() -> String {
|
||||||
|
let dsession = std::env::var("DESKTOP_SESSION").unwrap();
|
||||||
|
let user_name = std::env::var("USERNAME").unwrap();
|
||||||
|
if let Ok(Some(x)) = run_cmds("ls /usr/share/* | grep ${DESKTOP_SESSION}-xorg.desktop".to_owned()) {
|
||||||
|
if x.trim_end().to_string() != "" {
|
||||||
|
match std::process::Command::new("pkexec")
|
||||||
|
.args(vec![
|
||||||
|
"sed",
|
||||||
|
"-i",
|
||||||
|
&format!("s/={0}$/={0}-xorg/g", &dsession),
|
||||||
|
&format!("/var/lib/AccountsService/users/{}", &user_name)
|
||||||
|
])
|
||||||
|
.output()
|
||||||
|
{
|
||||||
|
Ok(x) => {
|
||||||
|
let x = String::from_utf8_lossy(&x.stderr);
|
||||||
|
if !x.is_empty() {
|
||||||
|
log::error!("modify_default_login failed: {}", x);
|
||||||
|
return "Fix failed! Please re-login with X server manually".to_owned();
|
||||||
|
} else {
|
||||||
|
unsafe {UNMODIFIED = false;}
|
||||||
|
return "".to_owned();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
log::error!("modify_default_login failed: {}", err);
|
||||||
|
return "Fix failed! Please re-login with X server manually".to_owned();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if let Ok(Some(z)) = run_cmds("ls /usr/share/* | grep ${DESKTOP_SESSION:0:-8}.desktop".to_owned()) {
|
||||||
|
if z.trim_end().to_string() != "" {
|
||||||
|
match std::process::Command::new("pkexec")
|
||||||
|
.args(vec![
|
||||||
|
"sed",
|
||||||
|
"-i",
|
||||||
|
&format!("s/={}$/={}/g", &dsession, &dsession[..dsession.len()-8]),
|
||||||
|
&format!("/var/lib/AccountsService/users/{}", &user_name)
|
||||||
|
])
|
||||||
|
.output()
|
||||||
|
{
|
||||||
|
Ok(x) => {
|
||||||
|
let x = String::from_utf8_lossy(&x.stderr);
|
||||||
|
if !x.is_empty() {
|
||||||
|
log::error!("modify_default_login failed: {}", x);
|
||||||
|
return "Fix failed! Please re-login with X server manually".to_owned();
|
||||||
|
} else {
|
||||||
|
unsafe {UNMODIFIED = false;}
|
||||||
|
return "".to_owned();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
log::error!("modify_default_login failed: {}", err);
|
||||||
|
return "Fix failed! Please re-login with X server manually".to_owned();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "Fix failed! Please re-login with X server manually".to_owned();
|
||||||
|
}
|
||||||
|
|
||||||
// to-do: test the other display manager
|
// to-do: test the other display manager
|
||||||
fn _get_display_manager() -> String {
|
fn _get_display_manager() -> String {
|
||||||
if let Ok(x) = std::fs::read_to_string("/etc/X11/default-display-manager") {
|
if let Ok(x) = std::fs::read_to_string("/etc/X11/default-display-manager") {
|
||||||
|
17
src/ui.rs
17
src/ui.rs
@ -456,6 +456,9 @@ impl UI {
|
|||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
{
|
{
|
||||||
let dtype = crate::platform::linux::get_display_server();
|
let dtype = crate::platform::linux::get_display_server();
|
||||||
|
if "wayland" == dtype {
|
||||||
|
return "".to_owned();
|
||||||
|
}
|
||||||
if dtype != "x11" {
|
if dtype != "x11" {
|
||||||
return format!("Unsupported display server type {}, x11 expected!", dtype);
|
return format!("Unsupported display server type {}, x11 expected!", dtype);
|
||||||
}
|
}
|
||||||
@ -475,6 +478,18 @@ impl UI {
|
|||||||
return crate::platform::linux::fix_login_wayland();
|
return crate::platform::linux::fix_login_wayland();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn current_is_wayland(&mut self) -> bool {
|
||||||
|
#[cfg(target_os = "linux")]
|
||||||
|
return crate::platform::linux::current_is_wayland();
|
||||||
|
#[cfg(not(target_os = "linux"))]
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn modify_default_login(&mut self) -> String {
|
||||||
|
#[cfg(target_os = "linux")]
|
||||||
|
return crate::platform::linux::modify_default_login();
|
||||||
|
}
|
||||||
|
|
||||||
fn get_software_update_url(&self) -> String {
|
fn get_software_update_url(&self) -> String {
|
||||||
SOFTWARE_UPDATE_URL.lock().unwrap().clone()
|
SOFTWARE_UPDATE_URL.lock().unwrap().clone()
|
||||||
}
|
}
|
||||||
@ -561,6 +576,8 @@ impl sciter::EventHandler for UI {
|
|||||||
fn get_error();
|
fn get_error();
|
||||||
fn is_login_wayland();
|
fn is_login_wayland();
|
||||||
fn fix_login_wayland();
|
fn fix_login_wayland();
|
||||||
|
fn current_is_wayland();
|
||||||
|
fn modify_default_login();
|
||||||
fn get_options();
|
fn get_options();
|
||||||
fn get_option(String);
|
fn get_option(String);
|
||||||
fn get_peer_option(String, String);
|
fn get_peer_option(String, String);
|
||||||
|
@ -360,7 +360,8 @@ class App: Reactor.Component
|
|||||||
{is_can_screen_recording ? "": <CanScreenRecording />}
|
{is_can_screen_recording ? "": <CanScreenRecording />}
|
||||||
{is_can_screen_recording && !handler.is_process_trusted(false) ? <TrustMe /> : ""}
|
{is_can_screen_recording && !handler.is_process_trusted(false) ? <TrustMe /> : ""}
|
||||||
{system_error ? <SystemError /> : ""}
|
{system_error ? <SystemError /> : ""}
|
||||||
{!system_error && handler.is_login_wayland() ? <FixWayland /> : ""}
|
{!system_error && handler.is_login_wayland() && !handler.current_is_wayland() ? <FixWayland /> : ""}
|
||||||
|
{!system_error && handler.current_is_wayland() ? <ModifyDefaultLogin /> : ""}
|
||||||
</div>
|
</div>
|
||||||
<div .right-pane>
|
<div .right-pane>
|
||||||
<div .right-content>
|
<div .right-content>
|
||||||
@ -544,7 +545,7 @@ class FixWayland: Reactor.Component {
|
|||||||
return <div .trust-me>
|
return <div .trust-me>
|
||||||
<div>Warning</div>
|
<div>Warning</div>
|
||||||
<div>Login screen using Wayland is not supported</div>
|
<div>Login screen using Wayland is not supported</div>
|
||||||
<div #fix-wayland .link>Disable it</div>
|
<div #fix-wayland .link>Fix it</div>
|
||||||
</div>;
|
</div>;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -554,6 +555,23 @@ class FixWayland: Reactor.Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ModifyDefaultLogin: Reactor.Component {
|
||||||
|
function render() {
|
||||||
|
return <div .trust-me>
|
||||||
|
<div>Warning</div>
|
||||||
|
<div>Current Wayland display server is not supported</div>
|
||||||
|
<div #modify-default-login .link>Fix it(re-login required)</div>
|
||||||
|
</div>;
|
||||||
|
}
|
||||||
|
|
||||||
|
event click $(#modify-default-login) {
|
||||||
|
if (var r = handler.modify_default_login()) {
|
||||||
|
handler.msgbox("custom-error", "Error", r);
|
||||||
|
}
|
||||||
|
app.update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function watch_trust() {
|
function watch_trust() {
|
||||||
// not use TrustMe::update, because it is buggy
|
// not use TrustMe::update, because it is buggy
|
||||||
var trusted = handler.is_process_trusted(false);
|
var trusted = handler.is_process_trusted(false);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user