mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-12-20 14:39:09 +08:00
Compare commits
4 Commits
v1.1.6-202
...
fix/macos-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e6c72fe558 | ||
|
|
a964c6bbf5 | ||
|
|
239da373d0 | ||
|
|
217cfb091d |
@@ -90,14 +90,51 @@ mkdir -p build_pkg_scripts
|
|||||||
|
|
||||||
cat > build_pkg_scripts/postinstall <<'EOF'
|
cat > build_pkg_scripts/postinstall <<'EOF'
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
IDENTIFIER="cn.crossdesk.app"
|
||||||
|
|
||||||
|
# 获取当前登录用户
|
||||||
USER_HOME=$( /usr/bin/stat -f "%Su" /dev/console )
|
USER_HOME=$( /usr/bin/stat -f "%Su" /dev/console )
|
||||||
HOME_DIR=$( /usr/bin/dscl . -read /Users/$USER_HOME NFSHomeDirectory | awk '{print $2}' )
|
HOME_DIR=$( /usr/bin/dscl . -read /Users/$USER_HOME NFSHomeDirectory | awk '{print $2}' )
|
||||||
|
|
||||||
|
# 复制证书文件
|
||||||
DEST="$HOME_DIR/Library/Application Support/CrossDesk/certs"
|
DEST="$HOME_DIR/Library/Application Support/CrossDesk/certs"
|
||||||
|
|
||||||
mkdir -p "$DEST"
|
mkdir -p "$DEST"
|
||||||
cp -R "/Library/Application Support/CrossDesk/certs/"* "$DEST/"
|
cp -R "/Library/Application Support/CrossDesk/certs/"* "$DEST/"
|
||||||
|
|
||||||
|
# 清除应用的权限授权,以便重新授权
|
||||||
|
# 使用 tccutil 重置录屏权限和辅助功能权限
|
||||||
|
if command -v tccutil >/dev/null 2>&1; then
|
||||||
|
# 重置录屏权限
|
||||||
|
tccutil reset ScreenCapture "$IDENTIFIER" 2>/dev/null || true
|
||||||
|
# 重置辅助功能权限
|
||||||
|
tccutil reset Accessibility "$IDENTIFIER" 2>/dev/null || true
|
||||||
|
# 重置摄像头权限(如果需要)
|
||||||
|
tccutil reset Camera "$IDENTIFIER" 2>/dev/null || true
|
||||||
|
# 重置麦克风权限(如果需要)
|
||||||
|
tccutil reset Microphone "$IDENTIFIER" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 为所有用户清除权限(可选,如果需要)
|
||||||
|
# 遍历所有用户目录并清除权限
|
||||||
|
for USER_DIR in /Users/*; do
|
||||||
|
if [ -d "$USER_DIR" ] && [ "$USER_DIR" != "/Users/Shared" ]; then
|
||||||
|
USER_NAME=$(basename "$USER_DIR")
|
||||||
|
# 跳过系统用户
|
||||||
|
if [ "$USER_NAME" != "Shared" ] && [ -d "$USER_DIR/Library" ]; then
|
||||||
|
# 删除 TCC 数据库中的相关条目(需要管理员权限)
|
||||||
|
TCC_DB="$USER_DIR/Library/Application Support/com.apple.TCC/TCC.db"
|
||||||
|
if [ -f "$TCC_DB" ]; then
|
||||||
|
# 使用 sqlite3 删除相关权限记录(如果可用)
|
||||||
|
if command -v sqlite3 >/dev/null 2>&1; then
|
||||||
|
sqlite3 "$TCC_DB" "DELETE FROM access WHERE client='$IDENTIFIER' AND service IN ('kTCCServiceScreenCapture', 'kTCCServiceAccessibility');" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|||||||
@@ -90,14 +90,51 @@ mkdir -p build_pkg_scripts
|
|||||||
|
|
||||||
cat > build_pkg_scripts/postinstall <<'EOF'
|
cat > build_pkg_scripts/postinstall <<'EOF'
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
IDENTIFIER="cn.crossdesk.app"
|
||||||
|
|
||||||
|
# 获取当前登录用户
|
||||||
USER_HOME=$( /usr/bin/stat -f "%Su" /dev/console )
|
USER_HOME=$( /usr/bin/stat -f "%Su" /dev/console )
|
||||||
HOME_DIR=$( /usr/bin/dscl . -read /Users/$USER_HOME NFSHomeDirectory | awk '{print $2}' )
|
HOME_DIR=$( /usr/bin/dscl . -read /Users/$USER_HOME NFSHomeDirectory | awk '{print $2}' )
|
||||||
|
|
||||||
|
# 复制证书文件
|
||||||
DEST="$HOME_DIR/Library/Application Support/CrossDesk/certs"
|
DEST="$HOME_DIR/Library/Application Support/CrossDesk/certs"
|
||||||
|
|
||||||
mkdir -p "$DEST"
|
mkdir -p "$DEST"
|
||||||
cp -R "/Library/Application Support/CrossDesk/certs/"* "$DEST/"
|
cp -R "/Library/Application Support/CrossDesk/certs/"* "$DEST/"
|
||||||
|
|
||||||
|
# 清除应用的权限授权,以便重新授权
|
||||||
|
# 使用 tccutil 重置录屏权限和辅助功能权限
|
||||||
|
if command -v tccutil >/dev/null 2>&1; then
|
||||||
|
# 重置录屏权限
|
||||||
|
tccutil reset ScreenCapture "$IDENTIFIER" 2>/dev/null || true
|
||||||
|
# 重置辅助功能权限
|
||||||
|
tccutil reset Accessibility "$IDENTIFIER" 2>/dev/null || true
|
||||||
|
# 重置摄像头权限(如果需要)
|
||||||
|
tccutil reset Camera "$IDENTIFIER" 2>/dev/null || true
|
||||||
|
# 重置麦克风权限(如果需要)
|
||||||
|
tccutil reset Microphone "$IDENTIFIER" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 为所有用户清除权限(可选,如果需要)
|
||||||
|
# 遍历所有用户目录并清除权限
|
||||||
|
for USER_DIR in /Users/*; do
|
||||||
|
if [ -d "$USER_DIR" ] && [ "$USER_DIR" != "/Users/Shared" ]; then
|
||||||
|
USER_NAME=$(basename "$USER_DIR")
|
||||||
|
# 跳过系统用户
|
||||||
|
if [ "$USER_NAME" != "Shared" ] && [ -d "$USER_DIR/Library" ]; then
|
||||||
|
# 删除 TCC 数据库中的相关条目(需要管理员权限)
|
||||||
|
TCC_DB="$USER_DIR/Library/Application Support/com.apple.TCC/TCC.db"
|
||||||
|
if [ -f "$TCC_DB" ]; then
|
||||||
|
# 使用 sqlite3 删除相关权限记录(如果可用)
|
||||||
|
if command -v sqlite3 >/dev/null 2>&1; then
|
||||||
|
sqlite3 "$TCC_DB" "DELETE FROM access WHERE client='$IDENTIFIER' AND service IN ('kTCCServiceScreenCapture', 'kTCCServiceAccessibility');" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|||||||
@@ -101,12 +101,21 @@ int Render::RemoteWindow() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check every 1 second for rejoin
|
||||||
if (need_to_rejoin_) {
|
if (need_to_rejoin_) {
|
||||||
need_to_rejoin_ = false;
|
auto now = std::chrono::steady_clock::now();
|
||||||
for (const auto& [_, props] : client_properties_) {
|
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||||
if (props->rejoin_) {
|
now - last_rejoin_check_time_)
|
||||||
ConnectTo(props->remote_id_, props->remote_password_,
|
.count();
|
||||||
props->remember_password_);
|
|
||||||
|
if (elapsed >= 1000) {
|
||||||
|
last_rejoin_check_time_ = now;
|
||||||
|
need_to_rejoin_ = false;
|
||||||
|
for (const auto& [_, props] : client_properties_) {
|
||||||
|
if (props->rejoin_) {
|
||||||
|
ConnectTo(props->remote_id_, props->remote_password_,
|
||||||
|
props->remember_password_);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -168,7 +168,7 @@ SDL_HitTestResult Render::HitTestCallback(SDL_Window* window,
|
|||||||
return SDL_HITTEST_NORMAL;
|
return SDL_HITTEST_NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Render::Render() {}
|
Render::Render() : last_rejoin_check_time_(std::chrono::steady_clock::now()) {}
|
||||||
|
|
||||||
Render::~Render() {}
|
Render::~Render() {}
|
||||||
|
|
||||||
@@ -1011,6 +1011,8 @@ int Render::Run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
InitializeLogger();
|
InitializeLogger();
|
||||||
|
LOG_INFO("CrossDesk version: {}", CROSSDESK_VERSION);
|
||||||
|
|
||||||
InitializeSettings();
|
InitializeSettings();
|
||||||
InitializeSDL();
|
InitializeSDL();
|
||||||
InitializeModules();
|
InitializeModules();
|
||||||
|
|||||||
@@ -379,6 +379,7 @@ class Render {
|
|||||||
int audio_len_ = 0;
|
int audio_len_ = 0;
|
||||||
bool audio_buffer_fresh_ = false;
|
bool audio_buffer_fresh_ = false;
|
||||||
bool need_to_rejoin_ = false;
|
bool need_to_rejoin_ = false;
|
||||||
|
std::chrono::steady_clock::time_point last_rejoin_check_time_;
|
||||||
bool just_created_ = false;
|
bool just_created_ = false;
|
||||||
std::string controlled_remote_id_ = "";
|
std::string controlled_remote_id_ = "";
|
||||||
std::string focused_remote_id_ = "";
|
std::string focused_remote_id_ = "";
|
||||||
|
|||||||
Reference in New Issue
Block a user