4 Commits

Author SHA1 Message Date
Oskar Manhart
dcd662dc06 fix: use +dynamic-resolution in full sessions 2025-06-10 18:45:33 +02:00
Oskar Manhart
a317ba41f4 Merge branch 'main' into feat-optimize-flags 2025-06-10 16:11:41 +02:00
pre-commit-ci[bot]
fc3e5e0839 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2025-06-05 07:17:43 +00:00
Oskar Manhart
b42449459e feat: remove more default RDP flags to simplify debugging 2025-06-05 09:15:20 +02:00
5 changed files with 9 additions and 93 deletions

View File

@@ -17,7 +17,6 @@ WinApps works by:
- The GNU/Linux `/home` directory is accessible within Windows via the `\\tsclient\home` mount.
- Integration with `Nautilus`, allowing you to right-click files to open them with specific Windows applications based on the file MIME type.
- The [official taskbar widget](https://github.com/winapps-org/WinApps-Launcher) enables seamless administration of the Windows subsystem and offers an easy way to launch Windows applications.
- Microsoft Office links (e.g. ms-word://) from the host system are automatically opened in the Windows subsystem. (Note: You may need to use an [User Agent switcher](https://github.com/ray-lothian/UserAgent-Switcher/) Browser Extension and set the User-Agent to Windows, as as the Office webapps typically hide the "Open in Desktop App" option for Linux users.)
## Supported Applications
**WinApps supports <u>*ALL*</u> Windows applications.**
@@ -404,18 +403,9 @@ REMOVABLE_MEDIA="/run/media"
# [ADDITIONAL FREERDP FLAGS & ARGUMENTS]
# NOTES:
# - You can try adding /network:lan to these flags in order to increase performance, however, some users have faced issues with this.
# DEFAULT VALUE: '/cert:tofu /sound /microphone'
# DEFAULT VALUE: '/cert:tofu /sound /microphone +home-drive'
# VALID VALUES: See https://github.com/awakecoding/FreeRDP-Manuals/blob/master/User/FreeRDP-User-Manual.markdown
RDP_FLAGS="/cert:tofu /sound /microphone"
# [MULTIPLE MONITORS]
# NOTES:
# - If enabled, a FreeRDP bug *might* produce a black screen.
# DEFAULT VALUE: 'false'
# VALID VALUES:
# - 'true'
# - 'false'
MULTIMON="false"
RDP_FLAGS="/cert:tofu /sound /microphone +home-drive"
# [DEBUG WINAPPS]
# NOTES:
@@ -492,7 +482,7 @@ APP_SCAN_TIMEOUT="60"
- For domain users, you can uncomment and change `RDP_DOMAIN`.
- On high-resolution (UHD) displays, you can set `RDP_SCALE` to the scale you would like to use (100, 140 or 180).
- To add additional flags to the FreeRDP call (e.g. `/prevent-session-lock 120`), uncomment and use the `RDP_FLAGS` configuration option.
- For multi-monitor setups, you can try enabling `MULTIMON`. A FreeRDP bug may result in a black screen however, in which case you should revert this change.
- For multi-monitor setups, you can try adding `/multimon` to `RDP_FLAGS`. A FreeRDP bug may result in a black screen however, in which case you should revert this change.
- If you enable `DEBUG`, a log will be created on each application start in `~/.local/share/winapps/winapps.log`.
- If using a system on which the FreeRDP command is not `xfreerdp` or `xfreerdp3`, the correct command can be specified using `FREERDP_COMMAND`.

View File

@@ -1,9 +0,0 @@
[Desktop Entry]
Name=Microsoft Office Protocol Handler
Comment=Handle Microsoft Office URI schemes via WinApps
Exec=winapps manual %u
Terminal=false
Type=Application
MimeType=x-scheme-handler/ms-word;x-scheme-handler/ms-excel;x-scheme-handler/ms-powerpoint;x-scheme-handler/ms-outlook;x-scheme-handler/ms-access;x-scheme-handler/ms-visio;x-scheme-handler/ms-project;x-scheme-handler/ms-teams;x-scheme-handler/ms-whiteboard;x-scheme-handler/ms-officeapp;
NoDisplay=true
Categories=Office;Utility;

View File

@@ -49,9 +49,7 @@ REMOVABLE_MEDIA=""
RDP_SCALE=100
AUTOPAUSE="off"
AUTOPAUSE_TIME="300"
MULTIMON="false"
DEBUG="true"
MULTI_FLAG=""
# OTHER
FREERDP_PID=-1
@@ -212,9 +210,6 @@ function waLoadConfig() {
waThrowExit $EC_MISSING_CONFIG
fi
# Update 'MULTI_FLAG' based on 'MULTIMON'.
MULTI_FLAG=$([[ $MULTIMON == "true" ]] && echo "/multimon" || echo "+span")
# Update $RDP_SCALE.
waFixScale
# Update when $REMOVABLE_MEDIA is null
@@ -521,11 +516,8 @@ function waRunCommand() {
/u:"$RDP_USER" \
/p:"$RDP_PASS" \
/scale:"$RDP_SCALE" \
+dynamic-resolution \
+auto-reconnect \
+home-drive \
+clipboard \
-wallpaper \
+dynamic-resolution \
/wm-class:"Microsoft Windows" \
/t:"Windows RDP Session [$RDP_IP]" \
/v:"$RDP_IP" &>/dev/null &
@@ -540,12 +532,7 @@ function waRunCommand() {
/u:"$RDP_USER" \
/p:"$RDP_PASS" \
/scale:"$RDP_SCALE" \
+dynamic-resolution \
+auto-reconnect \
+home-drive \
+clipboard \
-wallpaper \
"$MULTI_FLAG" \
/app:program:"$2" \
/v:"$RDP_IP" &>/dev/null &
@@ -577,12 +564,7 @@ function waRunCommand() {
/u:"$RDP_USER" \
/p:"$RDP_PASS" \
/scale:"$RDP_SCALE" \
+dynamic-resolution \
+auto-reconnect \
+home-drive \
+clipboard \
-wallpaper \
"$MULTI_FLAG" \
/wm-class:"$FULL_NAME" \
/app:program:"$WIN_EXECUTABLE",icon:"$ICON",name:"$FULL_NAME" \
/v:"$RDP_IP" &>/dev/null &
@@ -603,13 +585,8 @@ function waRunCommand() {
/u:"$RDP_USER" \
/p:"$RDP_PASS" \
/scale:"$RDP_SCALE" \
+dynamic-resolution \
+auto-reconnect \
+home-drive \
+clipboard \
/drive:media,"$REMOVABLE_MEDIA" \
-wallpaper \
"$MULTI_FLAG" \
/wm-class:"$FULL_NAME" \
/app:program:"$WIN_EXECUTABLE",icon:"$ICON",name:$"FULL_NAME",cmd:\""$FILE_PATH"\" \
/v:"$RDP_IP" &>/dev/null &

View File

@@ -11,12 +11,12 @@
...
}:
let
rev = "e2e9fd9b7b66bd1432c2a7186017da5c281d5b9e";
hash = "sha256-N6ArgdiJyhWNALqpRxLR6RDDMsiqEf2RxWLQ2z7T23Y=";
rev = "2b2f4cea698096829fbd1c3c15970034a6f53261";
hash = "sha256-km8q3IL5sETbFsscNy4dDxYTytuKPJQJY81p7tSk63A=";
in
stdenv.mkDerivation rec {
pname = "winapps";
version = "0-unstable-2025-06-10";
version = "0-unstable-2025-06-05";
src = fetchFromGitHub {
owner = "winapps-org";

View File

@@ -92,10 +92,9 @@ VM_NAME="RDPWindows" # Name of the Windows VM (FOR 'libvirt' ONLY).
WAFLAVOR="docker" # Imported variable.
RDP_SCALE=100 # Imported variable.
RDP_FLAGS="" # Imported variable.
MULTIMON="false" # Imported variable.
DEBUG="true" # Imported variable.
FREERDP_COMMAND="" # Imported variable.
MULTI_FLAG="" # Set based on value of $MULTIMON.
PORT_TIMEOUT=5 # Default port check timeout.
RDP_TIMEOUT=30 # Default RDP connection test timeout.
APP_SCAN_TIMEOUT=60 # Default application scan timeout.
@@ -1047,9 +1046,6 @@ function waCheckRDPAccess() {
/p:"$RDP_PASS" \
/scale:"$RDP_SCALE" \
+auto-reconnect \
+home-drive \
-wallpaper \
+dynamic-resolution \
/app:program:"C:\Windows\System32\cmd.exe",cmd:"/C type NUL > $TEST_PATH_WIN && tsdiscon" \
/v:"$RDP_IP" &>"$FREERDP_LOG" &
@@ -1142,10 +1138,6 @@ function waFindInstalled() {
# Extract the name of the application from the absolute path of the folder.
APPLICATION="$(basename "$APPLICATION")"
if [[ "$APPLICATION" == "ms-office-protocol-handler.desktop" ]]; then
continue
fi
# Source 'Info' File Containing:
# - The Application Name (FULL_NAME)
# - The Shortcut Name (NAME)
@@ -1181,9 +1173,6 @@ function waFindInstalled() {
/p:"$RDP_PASS" \
/scale:"$RDP_SCALE" \
+auto-reconnect \
+home-drive \
-wallpaper \
+dynamic-resolution \
/app:program:"C:\Windows\System32\cmd.exe",cmd:"/C "$BATCH_SCRIPT_PATH_WIN"" \
/v:"$RDP_IP" &>"$FREERDP_LOG" &
@@ -1330,9 +1319,9 @@ MimeType=${MIME_TYPES}"
function waConfigureOfficiallySupported() {
# Declare variables.
local OSA_LIST=() # Stores a list of all officially supported applications installed on Windows.
local OFFICE_APPS=("access" "access-o365" "access-o365-x86" "access-x86" "adobe-cc" "acrobat9" "acrobat-x-pro" "aftereffects-cc" "audition-cc" "bridge-cc" "bridge-cc-x86" "bridge-cs6" "bridge-cs6-x86" "cmd" "dymo-connect" "excel" "excel-o365" "excel-o365-x86" "excel-x86" "excel-x86-2010" "explorer" "iexplorer" "illustrator-cc" "lightroom-cc" "linqpad8" "mirc" "mspaint" "onenote" "onenote-o365" "onenote-o365-x86" "onenote-x86" "outlook" "outlook-o365" "outlook-o365-x86" "powerpoint" "powerpoint-o365" "powerpoint-o365-x86" "powerpoint-x86" "publisher" "publisher-o365" "publisher-o365-x86" "publisher-x86" "project" "project-x86" "remarkable-desktop" "ssms20" "visual-studio-comm" "visual-studio-ent" "visual-studio-pro" "visio" "visio-x86" "word" "word-o365" "word-o365-x86" "word-x86" "word-x86-2010")
# Read the list of officially supported applications that are installed on Windows into an array, returning an empty array if no such files exist.
# This will remove leading and trailing whitespace characters as well as ignore empty lines.
readarray -t OSA_LIST < <(grep -v '^[[:space:]]*$' "$INST_FILE_PATH" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' 2>/dev/null || true)
# Create application entries for each officially supported application.
@@ -1346,19 +1335,6 @@ function waConfigureOfficiallySupported() {
# Configure the application.
waConfigureApp "$OSA" svg
# Check if the application is an Office app and copy the protocol handler.
if [[ " ${OFFICE_APPS[*]} " == *" $OSA "* ]]; then
# Determine the target directory based on whether the installation is for the system or user.
if [[ "$OPT_SYSTEM" -eq 1 ]]; then
TARGET_DIR="$SYS_APP_PATH"
else
TARGET_DIR="$USER_APP_PATH"
fi
# Copy the protocol handler to the appropriate directory.
$SUDO cp "./apps/ms-office-protocol-handler.desktop" "$TARGET_DIR/ms-office-protocol-handler.desktop"
fi
# Print feedback.
echo -e "${DONE_TEXT}Done!${CLEAR_TEXT}"
done
@@ -1581,13 +1557,6 @@ function waInstall() {
# Check for missing dependencies.
waCheckInstallDependencies
# Update $MULTI_FLAG.
if [[ $MULTIMON == "true" ]]; then
MULTI_FLAG="/multimon"
else
MULTI_FLAG="+span"
fi
# Update $RDP_SCALE.
waFixScale
@@ -1690,21 +1659,10 @@ function waEnsureOnPath() {
# Name: 'waUninstall'
# Role: Uninstalls WinApps.
function waUninstall() {
# Print feedback.
[ "$OPT_SYSTEM" -eq 1 ] && echo -e "${BOLD_TEXT}REMOVING SYSTEM INSTALLATION.${CLEAR_TEXT}"
[ "$OPT_USER" -eq 1 ] && echo -e "${BOLD_TEXT}REMOVING USER INSTALLATION.${CLEAR_TEXT}"
# Determine the target directory for the protocol handler based on the installation type.
if [[ "$OPT_SYSTEM" -eq 1 ]]; then
TARGET_DIR="$SYS_APP_PATH"
else
TARGET_DIR="$USER_APP_PATH"
fi
# Remove the 'ms-office-protocol-handler.desktop' file if it exists.
$SUDO rm -f "$TARGET_DIR/ms-office-protocol-handler.desktop"
# Declare variables.
local WINAPPS_DESKTOP_FILES=() # Stores a list of '.desktop' file paths.
local WINAPPS_APP_BASH_SCRIPTS=() # Stores a list of bash script paths.