mirror of
https://github.com/winapps-org/winapps.git
synced 2025-08-01 16:36:39 +02:00
Compare commits
147 Commits
doc-instal
...
805b479e45
Author | SHA1 | Date | |
---|---|---|---|
![]() |
805b479e45 | ||
![]() |
013cc42e07 | ||
![]() |
885d02079a | ||
![]() |
b3969aa3b7 | ||
![]() |
4019f9cb81 | ||
![]() |
a2568be16f | ||
![]() |
b9ef076dc8 | ||
![]() |
1edae785f4 | ||
![]() |
9d025fbdcb | ||
![]() |
997909b4a4 | ||
![]() |
a4d30724b5 | ||
![]() |
e2ac7f3749 | ||
![]() |
70ee239f90 | ||
![]() |
3677c87865 | ||
![]() |
2a7b1504d7 | ||
![]() |
21304d2299 | ||
![]() |
de68c79876 | ||
![]() |
9795c1b642 | ||
![]() |
335b9f7c8d | ||
![]() |
167e6a68e6 | ||
![]() |
d6cc8480c1 | ||
![]() |
04e52f18ce | ||
![]() |
268445aade | ||
![]() |
f6d56fdf50 | ||
![]() |
994dcc28f3 | ||
![]() |
92c9a01385 | ||
![]() |
d3d2fc232e | ||
![]() |
ee9523ee39 | ||
![]() |
e5929a134d | ||
![]() |
e83cd5ac68 | ||
![]() |
2f8d27ccad | ||
![]() |
5004e4a5ed | ||
![]() |
12cf5ce3be | ||
![]() |
9b1908b616 | ||
![]() |
d322050d5a | ||
![]() |
1887e5567f | ||
![]() |
b18a388cf4 | ||
![]() |
2751ba360a | ||
![]() |
dca4ccefd9 | ||
![]() |
a316c5adcc | ||
![]() |
3a1915fd7a | ||
![]() |
1c75c7161f | ||
![]() |
606282e838 | ||
![]() |
ae6e15ef15 | ||
![]() |
1f9f25e938 | ||
![]() |
4e7328d94d | ||
![]() |
dd744822a3 | ||
![]() |
6cf1846594 | ||
![]() |
2c2679aa1b | ||
![]() |
65ec4f032b | ||
![]() |
e96f080602 | ||
![]() |
f3d3d53f3a | ||
![]() |
35c181d721 | ||
![]() |
40ef5803bf | ||
![]() |
61af2140a1 | ||
![]() |
61d092f1a3 | ||
![]() |
ee0b168466 | ||
![]() |
8be1cd7101 | ||
![]() |
4e9a416e5f | ||
![]() |
74cd9d93fe | ||
![]() |
821bbcdadc | ||
![]() |
f9b8a13fdc | ||
![]() |
f42c49ec75 | ||
![]() |
109cd696eb | ||
![]() |
d962654fe5 | ||
![]() |
3c1038bb7e | ||
![]() |
1ffa6f5053 | ||
![]() |
7d1a986c90 | ||
![]() |
e4eb78a0ce | ||
![]() |
ab3916f1d2 | ||
![]() |
3bd48b7211 | ||
![]() |
d7156d3640 | ||
![]() |
6b17de3771 | ||
![]() |
206da93530 | ||
![]() |
c42bf78be5 | ||
![]() |
6379d8f00e | ||
![]() |
879e27272b | ||
![]() |
4bc58dd488 | ||
![]() |
b87ba41bad | ||
![]() |
290226aec7 | ||
![]() |
5831696ead | ||
![]() |
e164a6b5ef | ||
![]() |
0b6eed0a04 | ||
![]() |
c033d7c4a8 | ||
![]() |
a00939164d | ||
![]() |
d122319392 | ||
![]() |
b0a0993afc | ||
![]() |
7e657c58a7 | ||
![]() |
d3d97d7d35 | ||
![]() |
b678a9f130 | ||
![]() |
35c5a1dc6c | ||
![]() |
73e71aff80 | ||
![]() |
963e74b90e | ||
![]() |
26c3ae12ca | ||
![]() |
b2e2d946c8 | ||
![]() |
8c4a695a9f | ||
![]() |
01f070b701 | ||
![]() |
e20e3423fb | ||
![]() |
1ffdff8fbe | ||
![]() |
d12b400730 | ||
![]() |
db7562aec5 | ||
![]() |
373c85aeb2 | ||
![]() |
6e0da93a4a | ||
![]() |
6103770f0b | ||
![]() |
4884cc97ca | ||
![]() |
7b939fc541 | ||
![]() |
ad443a5a97 | ||
![]() |
6df306f32a | ||
![]() |
fe6322c585 | ||
![]() |
99fcee0982 | ||
![]() |
df3548778c | ||
![]() |
6c3d582406 | ||
![]() |
09abdb747e | ||
![]() |
06a112d012 | ||
![]() |
af1ba31334 | ||
![]() |
3290965614 | ||
![]() |
405e61d122 | ||
![]() |
80ba2ad378 | ||
![]() |
9a1ed82053 | ||
![]() |
9c0c39845c | ||
![]() |
8a4d8906d3 | ||
![]() |
0826a238bc | ||
![]() |
8cd9dd7919 | ||
![]() |
4ce6204881 | ||
![]() |
a060947ac5 | ||
![]() |
a98589ba14 | ||
![]() |
c98938776d | ||
![]() |
e897292a34 | ||
![]() |
f4f4d30998 | ||
![]() |
03c702a662 | ||
![]() |
b76598b3bb | ||
![]() |
7a59b3b9b7 | ||
![]() |
c554632fe1 | ||
![]() |
996ff12c7f | ||
![]() |
983a305518 | ||
![]() |
8e85c63ee5 | ||
![]() |
f25f319efa | ||
![]() |
854bc4e85f | ||
![]() |
ea1bd4f319 | ||
![]() |
dd2c5ee25d | ||
![]() |
a78982bda6 | ||
![]() |
b1e2107b8f | ||
![]() |
f27c3482a3 | ||
![]() |
af238bd4ba | ||
![]() |
74f0624fad | ||
![]() |
22032284fc | ||
![]() |
993129af37 |
22
.github/workflows/update-nix.yaml
vendored
22
.github/workflows/update-nix.yaml
vendored
@@ -5,12 +5,15 @@ permissions:
|
||||
pull-requests: write
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
types: [labeled]
|
||||
schedule:
|
||||
- cron: "0 10 * * 0" # https://crontab.guru/#0_10_*_*_0
|
||||
|
||||
jobs:
|
||||
updateFlakePackages:
|
||||
build:
|
||||
if: github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'rebuild nix')
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
@@ -18,11 +21,20 @@ jobs:
|
||||
|
||||
- name: Install Nix
|
||||
uses: DeterminateSystems/nix-installer-action@main
|
||||
with:
|
||||
trust-runner-user: true
|
||||
|
||||
- name: Set up Nix cache
|
||||
uses: DeterminateSystems/magic-nix-cache-action@main
|
||||
- name: Set up cache
|
||||
uses: cachix/cachix-action@v15
|
||||
with:
|
||||
name: winapps
|
||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||
|
||||
- name: Update flake packages
|
||||
uses: winapps-org/nix-update-action@v1.3.0
|
||||
uses: winapps-org/nix-update-action@v1.4.0
|
||||
with:
|
||||
extra-args: --version=branch
|
||||
skip-pr: "${{ github.event_name == 'pull_request' }}"
|
||||
|
||||
- name: Build packages
|
||||
run: nix build .#winapps .#winapps-launcher
|
||||
|
37
.github/workflows/update-submodule.yaml
vendored
Normal file
37
.github/workflows/update-submodule.yaml
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
name: Update submodules
|
||||
on:
|
||||
repository_dispatch:
|
||||
types: update
|
||||
|
||||
jobs:
|
||||
update:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Update module
|
||||
run: |
|
||||
pushd WinApps-Launcher
|
||||
branch=$(git rev-parse --abbrev-ref origin/HEAD | sed "s|origin/||")
|
||||
git config remote.origin.fetch "+refs/heads/$branch:refs/remotes/origin/$branch"
|
||||
git fetch --depth=1 origin "refs/heads/$branch"
|
||||
popd
|
||||
|
||||
git submodule update --init --remote WinApps-Launcher
|
||||
|
||||
- name: Commit and push
|
||||
uses: EndBug/add-and-commit@v9
|
||||
with:
|
||||
add: WinApps-Launcher
|
||||
default_author: github_actions
|
||||
message: "Update submodules"
|
||||
push: false
|
||||
|
||||
- name: Create PR
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
with:
|
||||
branch: chore/update_submodules
|
||||
delete-branch: true
|
||||
title: "Update submodules"
|
25
.github/workflows/update.yaml
vendored
25
.github/workflows/update.yaml
vendored
@@ -1,25 +0,0 @@
|
||||
name: Update submodules
|
||||
on:
|
||||
repository_dispatch:
|
||||
types: update
|
||||
|
||||
jobs:
|
||||
update:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Update module
|
||||
run: |
|
||||
git submodule update --init --recursive --checkout -f
|
||||
|
||||
- name: Commit and push
|
||||
uses: EndBug/add-and-commit@v9
|
||||
with:
|
||||
add: "WinApps-Launcher"
|
||||
default_author: github_actions
|
||||
message: "Update submodules"
|
||||
push: true
|
||||
fetch: true
|
142
README.md
142
README.md
@@ -1,5 +1,5 @@
|
||||
<p align="center"><img align="center" width="700" src="./icons/banner_dark.svg#gh-dark-mode-only"/></p>
|
||||
<p align="center"><img align="center" width="700" src="./icons/banner_dark.svg#gh-light-mode-only"/></p>
|
||||
<p align="center"><img align="center" width="700" src="./icons/banner_light.svg#gh-light-mode-only"/></p>
|
||||
<hr>
|
||||
|
||||
Run Windows applications (including [Microsoft 365](https://www.microsoft365.com/) and [Adobe Creative Cloud](https://www.adobe.com/creativecloud.html)) on GNU/Linux with `KDE Plasma`, `GNOME` or `XFCE`, integrated seamlessly as if they were native to the OS.
|
||||
@@ -120,7 +120,7 @@ Contributing to the list of supported applications is encouraged through submiss
|
||||
</td>
|
||||
<td>
|
||||
<b>Adobe Photoshop</b><br>
|
||||
(CS6, CC)<br>
|
||||
(CS6, CC, 2022)<br>
|
||||
<i><a href="https://commons.wikimedia.org/wiki/File:Adobe_Photoshop_CC_icon.svg">Icon</a> in the Public Domain.</i>
|
||||
</td>
|
||||
<!-- Command Prompt -->
|
||||
@@ -254,6 +254,14 @@ Contributing to the list of supported applications is encouraged through submiss
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<!-- mIRC -->
|
||||
<td>
|
||||
<img src="apps/mirc/icon.svg" width="100">
|
||||
</td>
|
||||
<td>
|
||||
<b>mIRC</b><br>
|
||||
<i><a href="https://en.wikipedia.org/wiki/MIRC#/media/File:Mircnewlogo.png">Icon</a> in the Public Domain.</i>
|
||||
</td>
|
||||
<!-- PowerShell -->
|
||||
<td>
|
||||
<img src="apps/powershell/icon.svg" width="100">
|
||||
@@ -262,6 +270,8 @@ Contributing to the list of supported applications is encouraged through submiss
|
||||
<b>PowerShell</b><br>
|
||||
<i><a href="https://iconduck.com/icons/102322/file-type-powershell">Icon</a> under <a href="https://iconduck.com/licenses/mit">MIT license</a>.</i>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<!-- Windows -->
|
||||
<td>
|
||||
<img src="icons/windows.svg" width="100">
|
||||
@@ -288,7 +298,7 @@ If you already have a Windows VM or server you wish to use with WinApps, you wil
|
||||
Install the required dependencies.
|
||||
- Debian/Ubuntu:
|
||||
```bash
|
||||
sudo apt install -y dialog freerdp3-x11 iproute2 libnotify-bin netcat-openbsd
|
||||
sudo apt install -y curl dialog freerdp3-x11 git iproute2 libnotify-bin netcat-openbsd
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
@@ -297,19 +307,19 @@ Install the required dependencies.
|
||||
|
||||
- Fedora/RHEL:
|
||||
```bash
|
||||
sudo dnf install -y dialog freerdp iproute libnotify nmap-ncat
|
||||
sudo dnf install -y curl dialog freerdp git iproute libnotify nmap-ncat
|
||||
```
|
||||
- Arch Linux:
|
||||
```bash
|
||||
sudo pacman -Syu --needed -y dialog freerdp iproute2 libnotify gnu-netcat
|
||||
sudo pacman -Syu --needed -y curl dialog freerdp git iproute2 libnotify gnu-netcat
|
||||
```
|
||||
- OpenSUSE:
|
||||
```bash
|
||||
sudo zypper install -y dialog freerdp iproute2 libnotify netcat-openbsd
|
||||
sudo zypper install -y curl dialog freerdp git iproute2 libnotify-tools netcat-openbsd
|
||||
```
|
||||
- Gentoo Linux:
|
||||
```bash
|
||||
sudo emerge --ask=n dev-util/dialog net-misc/freerdp:3 sys-apps/iproute2 x11-libs/libnotify net-analyzer/openbsd-netcat
|
||||
sudo emerge --ask=n net-misc/curl dev-util/dialog net-misc/freerdp:3 dev-vcs/git sys-apps/iproute2 x11-libs/libnotify net-analyzer/openbsd-netcat
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
@@ -352,7 +362,14 @@ RDP_DOMAIN=""
|
||||
# - 'docker': '127.0.0.1'
|
||||
# - 'podman': '127.0.0.1'
|
||||
# - 'libvirt': '' (BLANK)
|
||||
RDP_IP=""
|
||||
RDP_IP="127.0.0.1"
|
||||
|
||||
# [VM NAME]
|
||||
# NOTES:
|
||||
# - Only applicable when using 'libvirt'
|
||||
# - The libvirt VM name must match so that WinApps can determine VM IP, start the VM, etc.
|
||||
# DEFAULT VALUE: 'RDPWindows'
|
||||
VM_NAME="RDPWindows"
|
||||
|
||||
# [WINAPPS BACKEND]
|
||||
# DEFAULT VALUE: 'docker'
|
||||
@@ -374,6 +391,15 @@ WAFLAVOR="docker"
|
||||
# - '180'
|
||||
RDP_SCALE="100"
|
||||
|
||||
# [MOUNTING REMOVABLE PATHS FOR FILES]
|
||||
# NOTES:
|
||||
# - By default, `udisks` (which you most likely have installed) uses /run/media for mounting removable devices.
|
||||
# This improves compatibility with most desktop environments (DEs).
|
||||
# ATTENTION: The Filesystem Hierarchy Standard (FHS) recommends /media instead. Verify your system's configuration.
|
||||
# - To manually mount devices, you may optionally use /mnt.
|
||||
# REFERRENCE: https://wiki.archlinux.org/title/Udisks#Mount_to_/media
|
||||
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.
|
||||
@@ -428,10 +454,10 @@ AUTOPAUSE_TIME="300"
|
||||
FREERDP_COMMAND=""
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> [!IMPORTANT]
|
||||
> `RDP_USER` and `RDP_PASS` must correspond to a complete Windows user account and password, such as those created during Windows setup or for a domain user. User/PIN combinations are not valid for RDP access.
|
||||
|
||||
> [!NOTE]
|
||||
> [!IMPORTANT]
|
||||
> If you wish to use an alternative WinApps backend (other than `Docker`), uncomment and change `WAFLAVOR="docker"` to `WAFLAVOR="podman"` or `WAFLAVOR="libvirt"`.
|
||||
|
||||
#### Configuration Options Explained
|
||||
@@ -444,13 +470,65 @@ FREERDP_COMMAND=""
|
||||
- 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`.
|
||||
|
||||
### Step 4: Run the WinApps Installer
|
||||
Run the WinApps installer.
|
||||
### Step 4: Test FreeRDP
|
||||
1. Test establishing an RDP session by running the following command, replacing the `/u:`, `/p:`, and `/v:` values with the correct values specified in `~/.config/winapps/winapps.conf`.
|
||||
|
||||
```bash
|
||||
xfreerdp3 /u:"Your Windows Username" /p:"Your Windows Password" /v:192.168.122.2 /cert:tofu
|
||||
|
||||
# Or, if you installed FreeRDP using Flatpak
|
||||
flatpak run --command=xfreerdp com.freerdp.FreeRDP /u:"Your Windows Username" /p:"Your Windows Password" /v:192.168.122.2 /cert:tofu
|
||||
```
|
||||
|
||||
- Please note that the correct `FreeRDP` command may vary depending on your system (e.g. `xfreerdp`, `xfreerdp3`, etc.).
|
||||
- Ensure you use the correct IP address for your Windows instance in the above command.
|
||||
- If prompted within the terminal window, choose to accept the certificate permanently.
|
||||
|
||||
If the Windows desktop appears in a `FreeRDP` window, the configuration was successful and the correct RDP TLS certificate was enrolled on the Linux host. Disconnect from the RDP session and skip the following debugging step.
|
||||
|
||||
2. [DEBUGGING STEP] If an outdated or expired certificate is detected, the `FreeRDP` command will display output resembling the following. In this case, the old certificate will need to be removed and a new RDP TLS certificate installed.
|
||||
|
||||
```
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
@ WARNING: CERTIFICATE NAME MISMATCH! @
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
The hostname used for this connection (192.168.122.2:3389)
|
||||
does not match the name given in the certificate:
|
||||
Common Name (CN):
|
||||
RDPWindows
|
||||
A valid certificate for the wrong name should NOT be trusted!
|
||||
|
||||
The host key for 192.168.122.2:3389 has changed
|
||||
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
|
||||
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
|
||||
It is also possible that a host key has just been changed.
|
||||
The fingerprint for the host key sent by the remote host is 8e:b4:d2:8e:4e:14:e7:4e:82:9b:07:5b:e1:68:40:18:bc:db:5f:bc:29:0d:91:83:f9:17:f9:13:e6:51:dc:36
|
||||
Please contact your system administrator.
|
||||
Add correct host key in /home/rohanbarar/.config/freerdp/server/192.168.122.2_3389.pem to get rid of this message.
|
||||
```
|
||||
|
||||
If you experience the above error, delete any old or outdated RDP TLS certificates associated with Windows, as they can prevent `FreeRDP` from establishing a connection.
|
||||
|
||||
These certificates are located within `~/.config/freerdp/server/` and follow the naming format `<Windows-VM-IPv4-Address>_<RDP-Port>.pem` (e.g., `192.168.122.2_3389.pem`, `127.0.0.1_3389.pem`, etc.).
|
||||
|
||||
If you use FreeRDP for purposes other than WinApps, ensure you only remove certificates related to the relevant Windows VM. If no relevant certificates are found, no action is needed.
|
||||
|
||||
Following deletion, re-attempt establishing an RDP session.
|
||||
|
||||
### Step 5: Run the WinApps Installer
|
||||
With Windows still powered on, run the WinApps installer.
|
||||
|
||||
```bash
|
||||
bash <(curl https://raw.githubusercontent.com/winapps-org/winapps/main/setup.sh)
|
||||
```
|
||||
|
||||
A list of supported additional arguments can be accessed by running `./setup.sh --help`.
|
||||
Once WinApps is installed, a list of additional arguments can be accessed by running `winapps-setup --help`.
|
||||
|
||||
<img src="./demo/installer.gif" width=1000 alt="WinApps Installer Animation.">
|
||||
|
||||
@@ -489,6 +567,10 @@ First, make sure Flakes and the `nix` command are enabled.
|
||||
In your `~/.config/nix/nix.conf`:
|
||||
```
|
||||
experimental-features = nix-command flakes
|
||||
# specify to use binary cache (optional)
|
||||
extra-substituters = https://winapps.cachix.org/
|
||||
extra-trusted-public-keys = winapps.cachix.org-1:HI82jWrXZsQRar/PChgIx1unmuEsiQMQq+zt05CD36g=
|
||||
extra-trusted-users = <your-username> # replace with your username
|
||||
```
|
||||
|
||||
```bash
|
||||
@@ -513,7 +595,7 @@ nix profile install github:winapps-org/winapps#winapps-launcher # optional
|
||||
};
|
||||
|
||||
outputs =
|
||||
{
|
||||
inputs@{
|
||||
nixpkgs,
|
||||
winapps,
|
||||
...
|
||||
@@ -522,14 +604,28 @@ nix profile install github:winapps-org/winapps#winapps-launcher # optional
|
||||
nixosConfigurations.hostname = nixpkgs.lib.nixosSystem rec {
|
||||
system = "x86_64-linux";
|
||||
|
||||
specialArgs = {
|
||||
inherit inputs system;
|
||||
};
|
||||
|
||||
modules = [
|
||||
./configuration.nix
|
||||
(
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
pkgs,
|
||||
system ? pkgs.system,
|
||||
...
|
||||
}:
|
||||
{
|
||||
# set up binary cache (optional)
|
||||
nix.settings = {
|
||||
substituters = [ "https://winapps.cachix.org/" ];
|
||||
trusted-public-keys = [ "winapps.cachix.org-1:HI82jWrXZsQRar/PChgIx1unmuEsiQMQq+zt05CD36g=" ];
|
||||
};
|
||||
|
||||
environment.systemPackages = [
|
||||
winapps.packages.${system}.winapps
|
||||
winapps.packages.${system}.winapps-launcher # optional
|
||||
winapps.packages."${system}".winapps
|
||||
winapps.packages."${system}".winapps-launcher # optional
|
||||
];
|
||||
}
|
||||
)
|
||||
@@ -546,8 +642,18 @@ However, if you still don't want to use flakes, you can use WinApps with flake-c
|
||||
|
||||
```nix
|
||||
# configuration.nix
|
||||
{ ... }:
|
||||
{
|
||||
pkgs,
|
||||
system ? pkgs.system,
|
||||
...
|
||||
}:
|
||||
{
|
||||
# set up binary cache (optional)
|
||||
nix.settings = {
|
||||
substituters = [ "https://winapps.cachix.org/" ];
|
||||
trusted-public-keys = [ "winapps.cachix.org-1:HI82jWrXZsQRar/PChgIx1unmuEsiQMQq+zt05CD36g=" ];
|
||||
trusted-users = [ "<your username>" ]; # replace with your username
|
||||
};
|
||||
|
||||
environment.systemPackages =
|
||||
let
|
||||
|
Submodule WinApps-Launcher updated: eaa660d39b...9b3f6c5817
40
apps/dymo-connect/icon.svg
Normal file
40
apps/dymo-connect/icon.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 8.3 KiB |
17
apps/dymo-connect/info
Normal file
17
apps/dymo-connect/info
Normal file
@@ -0,0 +1,17 @@
|
||||
# GNOME shortcut name
|
||||
NAME="DYMO Connect"
|
||||
|
||||
# Used for descriptions and window class
|
||||
FULL_NAME="Software for DYMO label printers"
|
||||
|
||||
# The executable inside windows
|
||||
WIN_EXECUTABLE="C:\Program Files (x86)\DYMO\DYMO Connect\DYMOConnect.exe"
|
||||
|
||||
# GNOME categories
|
||||
CATEGORIES="WinApps;Office"
|
||||
|
||||
# GNOME mimetypes
|
||||
MIME_TYPES=""
|
||||
|
||||
# System Icon
|
||||
ICON="DYMOConnect"
|
24
apps/mirc/icon.svg
Normal file
24
apps/mirc/icon.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 54 KiB |
22
apps/mirc/info
Normal file
22
apps/mirc/info
Normal file
@@ -0,0 +1,22 @@
|
||||
# Copyright (c) 2024 Fmstrat | App tested by whitewolf101 02/22/2025
|
||||
# All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: Proprietary
|
||||
|
||||
# GNOME shortcut name
|
||||
NAME="mIRC"
|
||||
|
||||
# Used for descriptions and window class
|
||||
FULL_NAME="mIRC"
|
||||
|
||||
# The executable inside windows
|
||||
WIN_EXECUTABLE="C:\Program Files (x86)\mIRC\mirc.exe"
|
||||
|
||||
# GNOME categories
|
||||
CATEGORIES="WinApps;Network;IRCclient;"
|
||||
|
||||
# GNOME mimetypes
|
||||
MIME_TYPES=""
|
||||
|
||||
# System Icon
|
||||
ICON="mIRC"
|
37
apps/photoshop-2022/icon.svg
Normal file
37
apps/photoshop-2022/icon.svg
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 240 234" style="enable-background:new 0 0 240 234;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#001E36;}
|
||||
.st1{fill:#31A8FF;}
|
||||
</style>
|
||||
<g id="Layer_2_1_">
|
||||
<g id="Surfaces">
|
||||
<g id="Photo_Surface">
|
||||
<g id="Outline_no_shadow">
|
||||
<path class="st0" d="M42.5,0h155C221,0,240,19,240,42.5v149c0,23.5-19,42.5-42.5,42.5h-155C19,234,0,215,0,191.5v-149
|
||||
C0,19,19,0,42.5,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Outlined_Mnemonics_Logos">
|
||||
<g id="Ps">
|
||||
<path class="st1" d="M54,164.1V61.2c0-0.7,0.3-1.1,1-1.1c1.7,0,3.3,0,5.6-0.1c2.4-0.1,4.9-0.1,7.6-0.2c2.7-0.1,5.6-0.1,8.7-0.2
|
||||
c3.1-0.1,6.1-0.1,9.1-0.1c8.2,0,15,1,20.6,3.1c5,1.7,9.6,4.5,13.4,8.2c3.2,3.2,5.7,7.1,7.3,11.4c1.5,4.2,2.3,8.5,2.3,13
|
||||
c0,8.6-2,15.7-6,21.3c-4,5.6-9.6,9.8-16.1,12.2c-6.8,2.5-14.3,3.4-22.5,3.4c-2.4,0-4,0-5-0.1c-1-0.1-2.4-0.1-4.3-0.1v32.1
|
||||
c0.1,0.7-0.4,1.3-1.1,1.4c-0.1,0-0.2,0-0.4,0H55.2C54.4,165.4,54,165,54,164.1z M75.8,79.4V113c1.4,0.1,2.7,0.2,3.9,0.2H85
|
||||
c3.9,0,7.8-0.6,11.5-1.8c3.2-0.9,6-2.8,8.2-5.3c2.1-2.5,3.1-5.9,3.1-10.3c0.1-3.1-0.7-6.2-2.3-8.9c-1.7-2.6-4.1-4.6-7-5.7
|
||||
c-3.7-1.5-7.7-2.1-11.8-2c-2.6,0-4.9,0-6.8,0.1C77.9,79.2,76.5,79.3,75.8,79.4L75.8,79.4z"/>
|
||||
<path class="st1" d="M192,106.9c-3-1.6-6.2-2.7-9.6-3.4c-3.7-0.8-7.4-1.3-11.2-1.3c-2-0.1-4.1,0.2-6,0.7c-1.3,0.3-2.4,1-3.1,2
|
||||
c-0.5,0.8-0.8,1.8-0.8,2.7c0,0.9,0.4,1.8,1,2.6c0.9,1.1,2.1,2,3.4,2.7c2.3,1.2,4.7,2.3,7.1,3.3c5.4,1.8,10.6,4.3,15.4,7.3
|
||||
c3.3,2.1,6,4.9,7.9,8.3c1.6,3.2,2.4,6.7,2.3,10.3c0.1,4.7-1.3,9.4-3.9,13.3c-2.8,4-6.7,7.1-11.2,8.9c-4.9,2.1-10.9,3.2-18.1,3.2
|
||||
c-4.6,0-9.1-0.4-13.6-1.3c-3.5-0.6-7-1.7-10.2-3.2c-0.7-0.4-1.2-1.1-1.1-1.9v-17.4c0-0.3,0.1-0.7,0.4-0.9
|
||||
c0.3-0.2,0.6-0.1,0.9,0.1c3.9,2.3,8,3.9,12.4,4.9c3.8,1,7.8,1.5,11.8,1.5c3.8,0,6.5-0.5,8.3-1.4c1.6-0.7,2.7-2.4,2.7-4.2
|
||||
c0-1.4-0.8-2.7-2.4-4c-1.6-1.3-4.9-2.8-9.8-4.7c-5.1-1.8-9.8-4.2-14.2-7.2c-3.1-2.2-5.7-5.1-7.6-8.5c-1.6-3.2-2.4-6.7-2.3-10.2
|
||||
c0-4.3,1.2-8.4,3.4-12.1c2.5-4,6.2-7.2,10.5-9.2c4.7-2.4,10.6-3.5,17.7-3.5c4.1,0,8.3,0.3,12.4,0.9c3,0.4,5.9,1.2,8.6,2.3
|
||||
c0.4,0.1,0.8,0.5,1,0.9c0.1,0.4,0.2,0.8,0.2,1.2v16.3c0,0.4-0.2,0.8-0.5,1C192.9,107.1,192.4,107.1,192,106.9z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.6 KiB |
17
apps/photoshop-2022/info
Normal file
17
apps/photoshop-2022/info
Normal file
@@ -0,0 +1,17 @@
|
||||
# GNOME shortcut name
|
||||
NAME="Photoshop 2022"
|
||||
|
||||
# Used for descriptions and window class
|
||||
FULL_NAME="Adobe Photoshop 2022"
|
||||
|
||||
# The executable inside windows
|
||||
WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe Photoshop 2022\Photoshop.exe"
|
||||
|
||||
# GNOME categories
|
||||
CATEGORIES="WinApps;Adobe"
|
||||
|
||||
# GNOME mimetypes
|
||||
MIME_TYPES="image/vnd.adobe.photoshop;"
|
||||
|
||||
# System Icon
|
||||
ICON="AdobePhotoshop"
|
97
apps/remarkable-desktop/icon.svg
Normal file
97
apps/remarkable-desktop/icon.svg
Normal file
@@ -0,0 +1,97 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
version="1.1"
|
||||
id="Livello_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 1881.25 1750"
|
||||
enable-background="new 0 0 1881.25 1750"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="icon.svg"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:ns="&ns_sfw;"><defs
|
||||
id="defs34" /><sodipodi:namedview
|
||||
id="namedview32"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.58685714"
|
||||
inkscape:cx="940.6037"
|
||||
inkscape:cy="800.02434"
|
||||
inkscape:window-width="2494"
|
||||
inkscape:window-height="1371"
|
||||
inkscape:window-x="66"
|
||||
inkscape:window-y="32"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Livello_1" />
|
||||
<metadata
|
||||
id="metadata2">
|
||||
<ns:sfw>
|
||||
<ns:slices />
|
||||
<ns:sliceSourceBounds
|
||||
bottomLeftOrigin="true"
|
||||
height="1750"
|
||||
width="1881.25"
|
||||
x="-938.5"
|
||||
y="-851" />
|
||||
</ns:sfw>
|
||||
</metadata>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<linearGradient
|
||||
id="SVGID_1_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="167.2057"
|
||||
y1="1420.9117"
|
||||
x2="795.2943"
|
||||
y2="333.0883"
|
||||
gradientTransform="matrix(1 0 0 -1 0 1752)">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#2368C4"
|
||||
id="stop20" />
|
||||
<stop
|
||||
offset="0.5"
|
||||
style="stop-color:#1A5DBE"
|
||||
id="stop22" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#1146AC"
|
||||
id="stop24" />
|
||||
</linearGradient>
|
||||
|
||||
|
||||
<rect
|
||||
style="fill:#fff6d5"
|
||||
id="rect399"
|
||||
width="1881.25"
|
||||
height="1750"
|
||||
x="0"
|
||||
y="0"
|
||||
ry="134.62839" /><text
|
||||
xml:space="preserve"
|
||||
style="font-size:1066.67px;fill:#000000;-inkscape-font-specification:serif;font-family:serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
|
||||
x="204.01395"
|
||||
y="1266.3248"
|
||||
id="text295"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan293"
|
||||
x="204.01395"
|
||||
y="1266.3248">rM</tspan></text></svg>
|
After Width: | Height: | Size: 2.3 KiB |
17
apps/remarkable-desktop/info
Normal file
17
apps/remarkable-desktop/info
Normal file
@@ -0,0 +1,17 @@
|
||||
# GNOME shortcut name
|
||||
NAME="reMarkable"
|
||||
|
||||
# Used for descriptions and window class
|
||||
FULL_NAME="reMarkable Desktop App"
|
||||
|
||||
# The executable inside windows
|
||||
WIN_EXECUTABLE="C:\Program Files\reMarkable\reMarkable.exe"
|
||||
|
||||
# GNOME categories
|
||||
CATEGORIES="WinApps;Office"
|
||||
|
||||
# GNOME mimetypes
|
||||
MIME_TYPES=""
|
||||
|
||||
# System Icon
|
||||
ICON="reMarkable"
|
23
bin/winapps
23
bin/winapps
@@ -29,7 +29,6 @@ readonly COMPOSE_PATH="${HOME}/.config/winapps/compose.yaml"
|
||||
readonly SCRIPT_DIR_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
|
||||
|
||||
# OTHER
|
||||
readonly VM_NAME="RDPWindows" # FOR 'libvirt' ONLY
|
||||
readonly CONTAINER_NAME="WinApps" # FOR 'docker' AND 'podman' ONLY
|
||||
readonly RDP_PORT=3389
|
||||
readonly DOCKER_IP="127.0.0.1"
|
||||
@@ -42,9 +41,11 @@ RDP_USER=""
|
||||
RDP_PASS=""
|
||||
RDP_DOMAIN=""
|
||||
RDP_IP=""
|
||||
VM_NAME="RDPWindows" # FOR 'libvirt' ONLY
|
||||
WAFLAVOR="docker"
|
||||
RDP_FLAGS=""
|
||||
FREERDP_COMMAND=""
|
||||
REMOVABLE_MEDIA=""
|
||||
RDP_SCALE=100
|
||||
AUTOPAUSE="off"
|
||||
AUTOPAUSE_TIME="300"
|
||||
@@ -123,7 +124,7 @@ Please run:
|
||||
;;
|
||||
"$EC_NOT_EXIST")
|
||||
dprint "ERROR: WINDOWS NONEXISTENT. EXITING."
|
||||
notify-send --expire-time=8000 --icon="dialog-error" --app-name="WinApps" --urgency="low" "WinApps" "Windows does not exist."
|
||||
notify-send --expire-time=8000 --icon="dialog-error" --app-name="WinApps" --urgency="low" "WinApps" "Windows VM named '${VM_NAME}' does not exist."
|
||||
;;
|
||||
"$EC_UNKNOWN")
|
||||
dprint "ERROR: UNKNOWN CONTAINER ERROR. EXITING."
|
||||
@@ -156,7 +157,16 @@ Please run:
|
||||
function dprint() {
|
||||
[ "$DEBUG" = "true" ] && echo "[$(date)-$RUNID] $1" >>"$LOG_PATH"
|
||||
}
|
||||
|
||||
# Name: 'waFixRemovableMedia'
|
||||
# Role: If user left REMOVABLE_MEDIA config null,fallback to /run/media for udisks defaults ,warning.
|
||||
function waFixRemovableMedia() {
|
||||
if [ -z "$REMOVABLE_MEDIA" ]; then
|
||||
REMOVABLE_MEDIA="/run/media" # Default for udisks
|
||||
dprint "NOTICE: Using default REMOVABLE_MEDIA: $REMOVABLE_MEDIA"
|
||||
notify-send --expire-time=3000 --icon="drive-removable-media" \
|
||||
"WinApps Notice" "Using default removable media path: $REMOVABLE_MEDIA"
|
||||
fi
|
||||
}
|
||||
# Name: 'waFixScale'
|
||||
# Role: Since FreeRDP only supports '/scale' values of 100, 140 or 180, find the closest supported argument to the user's configuration.
|
||||
function waFixScale() {
|
||||
@@ -207,7 +217,8 @@ function waLoadConfig() {
|
||||
|
||||
# Update $RDP_SCALE.
|
||||
waFixScale
|
||||
|
||||
# Update when $REMOVABLE_MEDIA is null
|
||||
waFixRemovableMedia
|
||||
# Update $AUTOPAUSE_TIME.
|
||||
# RemoteApp RDP sessions take, at minimum, 20 seconds to be terminated by the Windows server.
|
||||
# Hence, subtract 20 from the timeout specified by the user, as a 'built in' timeout of 20 seconds will occur.
|
||||
@@ -581,7 +592,8 @@ function waRunCommand() {
|
||||
else
|
||||
# Convert path from UNIX to Windows style.
|
||||
FILE_PATH=$(echo "$2" | sed \
|
||||
-e 's|'"${HOME}"'|\\\\tsclient\\home|' \
|
||||
-e 's|^'"${HOME}"'|\\\\tsclient\\home|' \
|
||||
-e 's|^\('"${REMOVABLE_MEDIA//|/\\|}"'\)/[^/]*|\\\\tsclient\\media|' \
|
||||
-e 's|/|\\|g')
|
||||
dprint "UNIX_FILE_PATH: ${2}"
|
||||
dprint "WINDOWS_FILE_PATH: ${FILE_PATH}"
|
||||
@@ -595,6 +607,7 @@ function waRunCommand() {
|
||||
+auto-reconnect \
|
||||
+home-drive \
|
||||
+clipboard \
|
||||
/drive:media,"$REMOVABLE_MEDIA" \
|
||||
-wallpaper \
|
||||
"$MULTI_FLAG" \
|
||||
/wm-class:"$FULL_NAME" \
|
||||
|
16
compose.yaml
16
compose.yaml
@@ -14,19 +14,20 @@ services:
|
||||
# Version of Windows to configure. For valid options, visit:
|
||||
# https://github.com/dockur/windows?tab=readme-ov-file#how-do-i-select-the-windows-version
|
||||
# https://github.com/dockur/windows?tab=readme-ov-file#how-do-i-install-a-custom-image
|
||||
VERSION: "tiny11"
|
||||
VERSION: "11"
|
||||
RAM_SIZE: "4G" # RAM allocated to the Windows VM.
|
||||
CPU_CORES: "4" # CPU cores allocated to the Windows VM.
|
||||
DISK_SIZE: "64G" # Size of the primary hard disk.
|
||||
#DISK2_SIZE: "32G" # Uncomment to add an additional hard disk to the Windows VM. Ensure it is mounted as a volume below.
|
||||
#USERNAME: "Docker" # Uncomment to set a custom Windows username. The default is 'Docker'.
|
||||
#PASSWORD: "" # Uncomment to set a password for the Windows user. There is no default password.
|
||||
USERNAME: "MyWindowsUser" # Edit here to set a custom Windows username. The default is 'MyWindowsUser'.
|
||||
PASSWORD: "MyWindowsPassword" # Edit here to set a password for the Windows user. The default is 'MyWindowsPassword'.
|
||||
HOME: "${HOME}" # Set path to Linux user home folder.
|
||||
privileged: true # Grant the Windows VM extended privileges.
|
||||
ports:
|
||||
- 8006:8006 # Map '8006' on Linux host to '8006' on Windows VM --> For VNC Web Interface @ http://127.0.0.1:8006.
|
||||
- 3389:3389/tcp # Map '3389' on Linux host to '3389' on Windows VM --> For Remote Desktop Protocol (RDP).
|
||||
- 3389:3389/udp # Map '3389' on Linux host to '3389' on Windows VM --> For Remote Desktop Protocol (RDP).
|
||||
cap_add:
|
||||
- NET_ADMIN # Add network permission
|
||||
stop_grace_period: 120s # Wait 120 seconds before sending SIGTERM when attempting to shut down the Windows VM.
|
||||
restart: on-failure # Restart the Windows VM if the exit code indicates an error.
|
||||
volumes:
|
||||
@@ -37,5 +38,8 @@ services:
|
||||
#- /path/to/windows/install/media.iso:/custom.iso # Uncomment to use a custom Windows ISO. If specified, 'VERSION' (e.g. 'tiny11') will be ignored.
|
||||
devices:
|
||||
- /dev/kvm # Enable KVM.
|
||||
#- /dev/sdX:/disk1 # Uncomment to mount a disk directly within the Windows VM (Note: 'disk1' will be mounted as the main drive).
|
||||
#- /dev/sdY:/disk2 # Uncomment to mount a disk directly within the Windows VM (Note: 'disk2' and higher will be mounted as secondary drives).
|
||||
- /dev/net/tun # Enable tuntap
|
||||
#- /dev/sdX:/disk1 # Uncomment to mount a disk directly within the Windows VM (Note: 'disk1' will be mounted as the main drive. THIS DISK WILL BE FORMATTED BY DOCKER).
|
||||
#- /dev/sdY:/disk2 # Uncomment to mount a disk directly within the Windows VM (Note: 'disk2' and higher will be mounted as secondary drives. THIS DISK WILL NOT BE FORMATTED).
|
||||
#group_add: # uncomment this line and the next one for using rootless podman containers
|
||||
# - keep-groups # to make /dev/kvm work with podman. needs "crun" installed, "runc" will not work! Add your user to the 'kvm' group or another that can access /dev/kvm.
|
||||
|
@@ -6,6 +6,15 @@ Although WinApps supports using `QEMU+KVM+libvirt` as a backend for running Wind
|
||||
|
||||
> [!IMPORTANT]
|
||||
> WinApps does __NOT__ officially support versions of Windows prior to Windows 10. Despite this, it may be possible to achieve a successful installation with some additional experimentation. If you find a way to achieve this, please share your solution through a pull request for the benefit of other users.
|
||||
> Possible setup instructions for Windows 10:
|
||||
> - 'Professional', 'Enterprise' or 'Server' editions of Windows are required to run RDP applications. Windows 'Home' will __NOT__ suffice.
|
||||
> - It is recommended to edit the initial `compose.yaml` file to keep your required username and password from the beginning.
|
||||
> - It is recommended to not use `sudo` to force commands to run. Add your user to the relevant permissions group wherever possible.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> The iptables kernel module must be loaded for folder sharing with the host to work.
|
||||
> Check that the output of `lsmod | grep ip_tables` and `lsmod | grep iptable_nat` is non empty.
|
||||
> If the output of one of the previous command is empty, run `echo -e "ip_tables\niptable_nat" | sudo tee /etc/modules-load.d/iptables.conf` and reboot.
|
||||
|
||||
## `Docker`
|
||||
### Installation
|
||||
@@ -18,11 +27,14 @@ Prior to installing Windows, you can modify the RAM and number of CPU cores avai
|
||||
|
||||
It is also possible to specify the version of Windows you wish to install within `compose.yaml` by modifying `VERSION`.
|
||||
|
||||
> [!NOTE]
|
||||
> WinApps uses a stripped-down Windows installation by default. Although this is recommended, you can request a stock Windows installation by changing `VERSION` to one of the versions listed in the README of the [original GitHub repository](https://github.com/dockur/windows).
|
||||
|
||||
Please refer to the [original GitHub repository](https://github.com/dockur/windows) for more information on additional configuration options.
|
||||
|
||||
> [!NOTE]
|
||||
> If you want to undo all your changes and start from scratch, run the following. For `podman`, replace `docker compose` with `podman-compose`.
|
||||
> ```bash
|
||||
> docker compose down --rmi=all --volumes
|
||||
> ```
|
||||
|
||||
### Installing Windows
|
||||
You can initiate the Windows installation using `docker compose`.
|
||||
```bash
|
||||
@@ -32,36 +44,19 @@ docker compose --file ./compose.yaml up
|
||||
|
||||
You can then access the Windows virtual machine via a VNC connection to complete the Windows setup by navigating to http://127.0.0.1:8006 in your web browser.
|
||||
|
||||
After installing Windows, comment out the following lines in the `compose.yaml` file by prepending a '#':
|
||||
- `- ./oem:/oem`
|
||||
- `- /path/to/windows/install/media.iso:/custom.iso` (if relevant)
|
||||
|
||||
Then, copy this modified `compose.yaml` file to `~/.config/winapps/compose.yaml`.
|
||||
|
||||
```bash
|
||||
cp ./compose.yaml ~/.config/winapps/compose.yaml
|
||||
```
|
||||
|
||||
Finally, ensure the new configuration is applied by running the following:
|
||||
|
||||
```bash
|
||||
docker compose --file ./compose.yaml down
|
||||
docker compose --file ~/.config/winapps/compose.yaml up
|
||||
```
|
||||
|
||||
|
||||
### Changing `compose.yaml`
|
||||
Changes to `compose.yaml` require the Windows virtual machine to be removed and re-created. This should __NOT__ affect your data.
|
||||
Changes to `compose.yaml` require the container to be removed and re-created. This should __NOT__ affect your data.
|
||||
|
||||
```bash
|
||||
# Stop and remove the existing Windows virtual machine.
|
||||
# Stop and remove the existing container.
|
||||
docker compose --file ~/.config/winapps/compose.yaml down
|
||||
|
||||
# Remove the existing FreeRDP certificate (if required).
|
||||
# Note: A new certificate will be created when connecting via RDP for the first time.
|
||||
rm ~/.config/freerdp/server/127.0.0.1_3389.pem
|
||||
|
||||
# Re-create the virtual machine with the updated configuration.
|
||||
# Re-create the container with the updated configuration.
|
||||
# Add the -d flag at the end to run the container in the background.
|
||||
docker compose --file ~/.config/winapps/compose.yaml up
|
||||
```
|
||||
|
||||
@@ -83,6 +78,12 @@ docker compose --file ~/.config/winapps/compose.yaml kill # Force shut down the
|
||||
### Setup `Podman` Container
|
||||
Please follow the [`docker` instructions](#setup-docker-container).
|
||||
|
||||
> [!NOTE]
|
||||
> #### Rootless `podman` containers
|
||||
> If you are invoking podman as a user, your container will be "rootless". This can be desirable as a security feature. However, you may encounter an error about missing permissions to /dev/kvm as a consequence.
|
||||
>
|
||||
> For rootless podman to work, you need to add your user to the `kvm` group (depending on your distribution) to be able to access `/dev/kvm`. Make sure that you are using `crun` as your container runtime, not `runc`. Usually this is done by stopping all containers and (de-)installing the corresponding packages. Then either invoke podman-compose as `podman-compose --file ./compose.yaml --podman-create-args '--group-add keep-groups' up`. Or edit `compose.yaml` and uncomment the `group_add:` section at the end.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Ensure `WAFLAVOR` is set to `"podman"` in `~/.config/winapps/winapps.conf`.
|
||||
|
||||
@@ -95,35 +96,18 @@ podman-compose --file ./compose.yaml up
|
||||
|
||||
You can then access the Windows virtual machine via a VNC connection to complete the Windows setup by navigating to http://127.0.0.1:8006 in your web browser.
|
||||
|
||||
After installing Windows, comment out the following lines in the `compose.yaml` file by prepending a '#':
|
||||
- `- ./oem:/oem`
|
||||
- `- /path/to/windows/install/media.iso:/custom.iso` (if relevant)
|
||||
|
||||
Then, copy this modified `compose.yaml` file to `~/.config/winapps/compose.yaml`.
|
||||
|
||||
```bash
|
||||
cp ./compose.yaml ~/.config/winapps/compose.yaml
|
||||
```
|
||||
|
||||
Finally, ensure the new configuration is applied by running the following:
|
||||
|
||||
```bash
|
||||
podman-compose --file ./compose.yaml down
|
||||
podman-compose --file ~/.config/winapps/compose.yaml up
|
||||
```
|
||||
|
||||
### Changing `compose.yaml`
|
||||
Changes to `compose.yaml` require the Windows virtual machine to be removed and re-created. This should __NOT__ affect your data.
|
||||
Changes to `compose.yaml` require the container to be removed and re-created. This should __NOT__ affect your data.
|
||||
|
||||
```bash
|
||||
# Stop and remove the existing Windows virtual machine.
|
||||
# Stop and remove the existing container.
|
||||
podman-compose --file ~/.config/winapps/compose.yaml down
|
||||
|
||||
# Remove the existing FreeRDP certificate (if required).
|
||||
# Note: A new certificate will be created when connecting via RDP for the first time.
|
||||
rm ~/.config/freerdp/server/127.0.0.1_3389.pem
|
||||
|
||||
# Re-create the virtual machine with the updated configuration.
|
||||
# Re-create the container with the updated configuration.
|
||||
podman-compose --file ~/.config/winapps/compose.yaml up
|
||||
```
|
||||
|
||||
|
@@ -39,21 +39,7 @@ Together, these components form a powerful and flexible virtualization stack, wi
|
||||
> ```
|
||||
> Thanks to imoize for pointing this out: https://github.com/winapps-org/winapps/issues/310#issuecomment-2505348088
|
||||
|
||||
4. Install `QEMU Guest Agent`.
|
||||
```bash
|
||||
sudo apt install qemu-guest-agent # Debian/Ubuntu
|
||||
sudo dnf install qemu-guest-agent # Fedora/RHEL
|
||||
sudo pacman -S qemu-guest-agent # Arch Linux
|
||||
sudo emerge app-emulation/qemu-guest-agent # Gentoo Linux
|
||||
sudo systemctl enable qemu-guest-agent
|
||||
sudo systemctl start qemu-guest-agent
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> `QEMU Guest Agent` is a helper daemon used to exchange information and commands between host and guest operating systems.
|
||||
> You can read more about `QEMU Guest Agent` [here](https://pve.proxmox.com/wiki/Qemu-guest-agent).
|
||||
|
||||
5. Configure rootless `libvirt` and `kvm` by adding your user to groups of the same name.
|
||||
4. Configure rootless `libvirt` and `kvm` by adding your user to groups of the same name.
|
||||
``` bash
|
||||
sudo usermod -a -G kvm $(id -un) # Add the user to the 'kvm' group.
|
||||
sudo usermod -a -G libvirt $(id -un) # Add the user to the 'libvirt' group.
|
||||
@@ -73,7 +59,7 @@ Together, these components form a powerful and flexible virtualization stack, wi
|
||||
|
||||
3. Reboot your system to ensure that the user is correctly added to the relevant groups.
|
||||
|
||||
6. If relevant to your distribution, disable `AppArmor` for the `libvirt` daemon.
|
||||
5. If relevant to your distribution, disable `AppArmor` for the `libvirt` daemon.
|
||||
``` bash
|
||||
sudo ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/ # Disable AppArmor for the libvirt daemon by creating a symbolic link.
|
||||
```
|
||||
@@ -81,12 +67,12 @@ Together, these components form a powerful and flexible virtualization stack, wi
|
||||
> [!NOTE]
|
||||
> Systems with `SELinux` may also require security policy adjustments if virtual machine images are stored outside the default `/var/lib/libvirt/images` directory. Read [this guide](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/5/html/virtualization/sect-virtualization-security_for_virtualization-selinux_and_virtualization#sect-Virtualization-Security_for_virtualization-SELinux_and_virtualization) for more information.
|
||||
|
||||
7. Download a [Windows 10](https://www.microsoft.com/software-download/windows10ISO) or [Windows 11](https://www.microsoft.com/software-download/windows11) installation `.ISO` image.
|
||||
6. Download a [Windows 10](https://www.microsoft.com/software-download/windows10ISO) or [Windows 11](https://www.microsoft.com/software-download/windows11) installation `.ISO` image.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> 'Professional', 'Enterprise' or 'Server' editions of Windows are required to run RDP applications. Windows 'Home' will NOT suffice.
|
||||
|
||||
8. Download [VirtIO drivers](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso) for the Windows virtual machine.
|
||||
7. Download [VirtIO drivers](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso) for the Windows virtual machine.
|
||||
|
||||
> [!NOTE]
|
||||
> VirtIO drivers enhance system performance and minimize overhead by enabling the Windows virtual machine to use specialised network and disk device drivers. These drivers are aware that they are operating inside a virtual machine, and cooperate with the hypervisor. This approach eliminates the need for the hypervisor to emulate physical hardware devices, which is a computationally expensive process. This setup allows guests to achieve high-performance network and disk operations, leveraging the benefits of paravirtualisation.
|
||||
@@ -146,6 +132,9 @@ Together, these components form a powerful and flexible virtualization stack, wi
|
||||
<img src="./libvirt_images/07.png" width="500px"/>
|
||||
</p>
|
||||
|
||||
> [!NOTE]
|
||||
> A name other than `RDPWindows` can be used if `VM_NAME` is set in `~/.config/winapps/winapps.conf`.
|
||||
|
||||
9. After clicking `Finish`, select `Copy host CPU configuration` under 'CPUs', and then click `Apply`.
|
||||
|
||||
> [!NOTE]
|
||||
@@ -644,10 +633,23 @@ Status Name DisplayName
|
||||
Running QEMU-GA QEMU Guest Agent
|
||||
```
|
||||
|
||||
You can then test whether the host GNU/Linux system can communicate with Windows via `QEMU Guest Agent` by running `virsh qemu-agent-command RDPWindows '{"execute":"guest-info"}'`. The output should resemble:
|
||||
You can then test whether the host GNU/Linux system can communicate with Windows via `QEMU Guest Agent` by running `virsh qemu-agent-command RDPWindows '{"execute":"guest-get-osinfo"}' --pretty`. The output should resemble:
|
||||
|
||||
```
|
||||
{"return":{"version":"107.0.1","supported_commands":[{"enabled":true,"name":"guest-get-cpustats","success-response":true},{"enabled":true,"name":"guest-get-diskstats","success-response":true},{"enabled":true,"name":"guest-get-devices","success-response":true},{"enabled":true,"name":"guest-get-osinfo","success-response":true},{"enabled":true,"name":"guest-get-timezone","success-response":true},{"enabled":true,"name":"guest-get-users","success-response":true},{"enabled":true,"name":"guest-get-host-name","success-response":true},{"enabled":true,"name":"guest-exec","success-response":true},{"enabled":true,"name":"guest-exec-status","success-response":true},{"enabled":false,"name":"guest-get-memory-block-info","success-response":true},{"enabled":false,"name":"guest-set-memory-blocks","success-response":true},{"enabled":false,"name":"guest-get-memory-blocks","success-response":true},{"enabled":true,"name":"guest-set-user-password","success-response":true},{"enabled":true,"name":"guest-get-fsinfo","success-response":true},{"enabled":true,"name":"guest-get-disks","success-response":true},{"enabled":false,"name":"guest-set-vcpus","success-response":true},{"enabled":true,"name":"guest-get-vcpus","success-response":true},{"enabled":true,"name":"guest-network-get-interfaces","success-response":true},{"enabled":false,"name":"guest-suspend-hybrid","success-response":false},{"enabled":true,"name":"guest-suspend-ram","success-response":false},{"enabled":true,"name":"guest-suspend-disk","success-response":false},{"enabled":true,"name":"guest-fstrim","success-response":true},{"enabled":true,"name":"guest-fsfreeze-thaw","success-response":true},{"enabled":true,"name":"guest-fsfreeze-freeze-list","success-response":true},{"enabled":true,"name":"guest-fsfreeze-freeze","success-response":true},{"enabled":true,"name":"guest-fsfreeze-status","success-response":true},{"enabled":true,"name":"guest-file-flush","success-response":true},{"enabled":true,"name":"guest-file-seek","success-response":true},{"enabled":true,"name":"guest-file-write","success-response":true},{"enabled":true,"name":"guest-file-read","success-response":true},{"enabled":true,"name":"guest-file-close","success-response":true},{"enabled":true,"name":"guest-file-open","success-response":true},{"enabled":true,"name":"guest-shutdown","success-response":false},{"enabled":true,"name":"guest-info","success-response":true},{"enabled":true,"name":"guest-set-time","success-response":true},{"enabled":true,"name":"guest-get-time","success-response":true},{"enabled":true,"name":"guest-ping","success-response":true},{"enabled":true,"name":"guest-sync","success-response":true},{"enabled":true,"name":"guest-sync-delimited","success-response":true}]}}
|
||||
```json
|
||||
{
|
||||
"return": {
|
||||
"name": "Microsoft Windows",
|
||||
"kernel-release": "26100",
|
||||
"version": "Microsoft Windows 11",
|
||||
"variant": "client",
|
||||
"pretty-name": "Windows 10 Pro",
|
||||
"version-id": "11",
|
||||
"variant-id": "client",
|
||||
"kernel-version": "10.0",
|
||||
"machine": "x86_64",
|
||||
"id": "mswindows"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Next, you will need to make some registry changes to enable RDP Applications to run on the system. Start by downloading the [RDPApps.reg](../oem/RDPApps.reg) file, right-clicking on the `Raw` button, and clicking on `Save target as`. Repeat the same thing for the [install.bat](../oem/install.bat) and the [NetProfileCleanup.ps1](../oem/NetProfileCleanup.ps1). **Do not download the Container.reg.**
|
||||
|
@@ -6,7 +6,7 @@
|
||||
height="394.31107"
|
||||
id="svg171"
|
||||
sodipodi:docname="Virtualisation_Stack.svg"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
inkscape:version="1.4 (e7c3feb1, 2024-10-09)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -27,14 +27,14 @@
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.4142136"
|
||||
inkscape:cx="157.68481"
|
||||
inkscape:cy="190.56528"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1003"
|
||||
inkscape:cx="158.03836"
|
||||
inkscape:cy="190.56527"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Hardware" />
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg171" />
|
||||
<title
|
||||
id="title1">Open-source-virtualization-stack</title>
|
||||
<style
|
||||
@@ -207,13 +207,15 @@
|
||||
fill-rule="evenodd"
|
||||
class="s8"
|
||||
d="m 266.57968,306.38322 c -0.6,-0.7 -1.6,-0.7 -2.2,0 l -6.2,6.2 c -0.6,0.6 -0.6,1.6 0,2.2 0.6,0.6 1.6,0.6 2.2,0 l 3.5,-3.6 v 18 c 0,0.9 0.7,1.5 1.6,1.5 0.8,0 1.5,-0.6 1.5,-1.5 v -18 l 3.6,3.6 c 0.6,0.6 1.6,0.6 2.2,0 0.6,-0.6 0.6,-1.6 0,-2.2 0,0 -6.2,-6.2 -6.2,-6.2 z"
|
||||
inkscape:label="Arrow_Up" />
|
||||
inkscape:label="Arrow_Up"
|
||||
style="fill:#999999" />
|
||||
<path
|
||||
id="Arrow_6"
|
||||
fill-rule="evenodd"
|
||||
class="s8"
|
||||
d="m 244.37968,330.28322 c 0.6,0.6 1.6,0.6 2.2,0 l 6.2,-6.2 c 0.6,-0.6 0.6,-1.6 0,-2.2 -0.6,-0.6 -1.6,-0.6 -2.2,0 l -3.6,3.5 v -17.9 c 0,-0.9 -0.7,-1.6 -1.5,-1.6 -0.9,0 -1.6,0.7 -1.6,1.6 v 17.9 l -3.5,-3.5 c -0.6,-0.6 -1.6,-0.6 -2.2,0 -0.6,0.6 -0.6,1.6 0,2.2 z"
|
||||
inkscape:label="Arrow_Down" />
|
||||
inkscape:label="Arrow_Down"
|
||||
style="fill:#999999" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@@ -274,13 +276,15 @@
|
||||
fill-rule="evenodd"
|
||||
class="s8"
|
||||
d="m 370.37233,213.93929 c -0.6,-0.7 -1.6,-0.7 -2.2,0 l -6.2,6.2 c -0.6,0.6 -0.6,1.6 0,2.2 0.6,0.6 1.6,0.6 2.2,0 l 3.5,-3.6 v 18 c 0,0.9 0.7,1.5 1.6,1.5 0.8,0 1.5,-0.6 1.5,-1.5 v -18 l 3.6,3.6 c 0.6,0.6 1.6,0.6 2.2,0 0.6,-0.6 0.6,-1.6 0,-2.2 0,0 -6.2,-6.2 -6.2,-6.2 z"
|
||||
inkscape:label="Up_Arrow" />
|
||||
inkscape:label="Up_Arrow"
|
||||
style="fill:#999999" />
|
||||
<path
|
||||
id="Arrow_4"
|
||||
fill-rule="evenodd"
|
||||
class="s8"
|
||||
d="m 348.17233,237.83929 c 0.6,0.6 1.6,0.6 2.2,0 l 6.2,-6.2 c 0.6,-0.6 0.6,-1.6 0,-2.2 -0.6,-0.6 -1.6,-0.6 -2.2,0 l -3.6,3.5 v -17.9 c 0,-0.9 -0.7,-1.6 -1.5,-1.6 -0.9,0 -1.6,0.7 -1.6,1.6 v 17.9 l -3.5,-3.5 c -0.6,-0.6 -1.6,-0.6 -2.2,0 -0.6,0.6 -0.6,1.6 0,2.2 0,0 6.2,6.2 6.2,6.2 z"
|
||||
inkscape:label="Down_Arrow" />
|
||||
inkscape:label="Down_Arrow"
|
||||
style="fill:#999999" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@@ -492,28 +496,32 @@
|
||||
class="s8"
|
||||
d="m 185.26144,170.08528 c 0.7,-0.6 0.7,-1.6 0,-2.2 l -6.2,-6.2 c -0.6,-0.6 -1.6,-0.6 -2.2,0 -0.6,0.6 -0.6,1.6 0,2.2 l 3.6,3.6 h -18 c -0.9,0 -1.5,0.7 -1.5,1.5 0,0.9 0.6,1.6 1.5,1.6 h 18 l -3.6,3.5 c -0.6,0.6 -0.6,1.6 0,2.2 0.6,0.6 1.6,0.6 2.2,0 z"
|
||||
inkscape:label="Right_Arrow"
|
||||
transform="translate(-0.005896,-0.00237805)" />
|
||||
transform="translate(-0.005896,-0.00237805)"
|
||||
style="fill:#999999" />
|
||||
<path
|
||||
id="Arrow_3"
|
||||
fill-rule="evenodd"
|
||||
class="s8"
|
||||
d="m 161.36144,147.88528 c -0.6,0.6 -0.6,1.6 0,2.2 l 6.2,6.2 c 0.6,0.6 1.6,0.6 2.2,0 0.6,-0.6 0.6,-1.6 0,-2.2 l -3.5,-3.5 h 17.9 c 0.9,0 1.6,-0.7 1.6,-1.6 0,-0.8 -0.7,-1.5 -1.6,-1.5 h -17.9 l 3.5,-3.6 c 0.6,-0.6 0.6,-1.6 0,-2.2 -0.6,-0.6 -1.6,-0.6 -2.2,0 z"
|
||||
inkscape:label="Left_Arrow"
|
||||
transform="translate(-0.005896,-0.00237805)" />
|
||||
transform="translate(-0.005896,-0.00237805)"
|
||||
style="fill:#999999" />
|
||||
<path
|
||||
id="Arrow_0"
|
||||
fill-rule="evenodd"
|
||||
class="s8"
|
||||
d="m 93.754521,93.097776 c -0.6,-0.7 -1.6,-0.7 -2.2,0 l -6.2,6.2 c -0.6,0.6 -0.6,1.600004 0,2.200004 0.6,0.6 1.6,0.6 2.2,0 l 3.5,-3.600004 v 18.000004 c 0,0.9 0.7,1.5 1.6,1.5 0.8,0 1.5,-0.6 1.5,-1.5 V 97.897776 l 3.6,3.600004 c 0.6,0.6 1.6,0.6 2.2,0 0.599999,-0.6 0.599999,-1.600004 0,-2.200004 0,0 -6.2,-6.2 -6.2,-6.2 z"
|
||||
inkscape:label="Up_Arrow"
|
||||
transform="translate(-0.005896,-0.00237805)" />
|
||||
transform="translate(-0.005896,-0.00237805)"
|
||||
style="fill:#999999" />
|
||||
<path
|
||||
id="Arrow_1"
|
||||
fill-rule="evenodd"
|
||||
class="s8"
|
||||
d="m 71.554521,116.96028 c 0.6,0.6 1.6,0.6 2.2,0 l 6.2,-6.2 c 0.6,-0.6 0.6,-1.6 0,-2.2 -0.6,-0.6 -1.6,-0.6 -2.2,0 l -3.6,3.5 V 94.160276 c 0,-0.9 -0.7,-1.6 -1.5,-1.6 -0.9,0 -1.6,0.7 -1.6,1.6 v 17.900004 l -3.5,-3.5 c -0.6,-0.6 -1.6,-0.6 -2.2,0 -0.6,0.6 -0.6,1.6 0,2.2 z"
|
||||
inkscape:label="Down_Arrow"
|
||||
transform="translate(-0.005896,-0.00237805)" />
|
||||
transform="translate(-0.005896,-0.00237805)"
|
||||
style="fill:#999999" />
|
||||
</g>
|
||||
<g
|
||||
id="g149"
|
||||
@@ -543,7 +551,7 @@
|
||||
id="GNU/Linux_Applications_Text"
|
||||
x="-193.88689"
|
||||
y="-3.0945449"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16px;font-family:Unageo;-inkscape-font-specification:'Unageo, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#ffffff;fill-opacity:1"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16px;font-family:Unageo;-inkscape-font-specification:'Unageo, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#808080;fill-opacity:1"
|
||||
transform="rotate(-90)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan188"
|
||||
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
@@ -1,16 +1,16 @@
|
||||
# Get the current network profile name
|
||||
$currentProfile = ^(Get-NetConnectionProfile^).Name
|
||||
$currentProfile = (Get-NetConnectionProfile).Name
|
||||
|
||||
# Get all profiles from the registry
|
||||
$profilesKey = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles"
|
||||
$profiles = Get-ChildItem -Path $profilesKey
|
||||
|
||||
foreach ^($profile in $profiles^) {
|
||||
foreach ($profile in $profiles) {
|
||||
$profilePath = "$profilesKey\$($profile.PSChildName)"
|
||||
$profileName = ^(Get-ItemProperty -Path $profilePath^).ProfileName
|
||||
$profileName = (Get-ItemProperty -Path $profilePath).ProfileName
|
||||
|
||||
# Remove profiles that don't match the current one
|
||||
if ^($profileName -ne $currentProfile^) {
|
||||
if ($profileName -ne $currentProfile) {
|
||||
Remove-Item -Path $profilePath -Recurse
|
||||
Write-Host "Deleted profile: $profileName"
|
||||
}
|
||||
@@ -18,11 +18,11 @@ foreach ^($profile in $profiles^) {
|
||||
|
||||
# Change the current profile name to "WinApps"
|
||||
$profiles = Get-ChildItem -Path $profilesKey
|
||||
foreach ^($profile in $profiles^) {
|
||||
foreach ($profile in $profiles) {
|
||||
$profilePath = "$profilesKey\$($profile.PSChildName)"
|
||||
$profileName = ^(Get-ItemProperty -Path $profilePath^).ProfileName
|
||||
$profileName = (Get-ItemProperty -Path $profilePath).ProfileName
|
||||
|
||||
if ^($profileName -eq $currentProfile^) {
|
||||
if ($profileName -eq $currentProfile) {
|
||||
# Update the profile name
|
||||
Set-ItemProperty -Path $profilePath -Name "ProfileName" -Value "WinApps"
|
||||
Write-Host "Renamed profile to: WinApps"
|
||||
|
@@ -1,5 +1,5 @@
|
||||
--- a/WinAppsLauncher.sh
|
||||
+++ b/WinAppsLauncher.sh
|
||||
--- a/WinApps-Launcher.sh
|
||||
+++ b/WinApps-Launcher.sh
|
||||
@@ -19,7 +19,7 @@ declare -rx EC_WIN_NOT_SPEC=6
|
||||
declare -rx EC_NO_WIN_FOUND=7
|
||||
|
@@ -9,12 +9,12 @@
|
||||
...
|
||||
}:
|
||||
let
|
||||
rev = "9f5fbcb57f2932b260202fb582f9adcf28df5f1c";
|
||||
hash = "sha256-cShXlcFHTryxKLKxdoqZSge2oyGgeuFPW9Nxg+gSjB4=";
|
||||
rev = "9b3f6c581791222a3a04508606755d6d0519f322";
|
||||
hash = "sha256-Hy/o5IY9HmTWaX54Ek5ABmppPpzgM+MdCrhzEzVmtwY=";
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "winapps-launcher";
|
||||
version = "0-unstable-2024-10-01";
|
||||
version = "0-unstable-2025-03-11";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "winapps-org";
|
||||
@@ -29,10 +29,10 @@ stdenv.mkDerivation rec {
|
||||
(callPackage ../winapps { })
|
||||
];
|
||||
|
||||
patches = [ ./WinAppsLauncher.patch ];
|
||||
patches = [ ./WinApps-Launcher.patch ];
|
||||
|
||||
postPatch = ''
|
||||
substituteAllInPlace WinAppsLauncher.sh
|
||||
substituteAllInPlace WinApps-Launcher.sh
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
@@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
|
||||
mkdir -p $out
|
||||
cp -r ./Icons $out/Icons
|
||||
|
||||
install -m755 -D WinAppsLauncher.sh $out/bin/winapps-launcher
|
||||
install -m755 -D WinApps-Launcher.sh $out/bin/winapps-launcher
|
||||
install -Dm444 -T Icons/AppIcon.svg $out/share/pixmaps/winapps.svg
|
||||
|
||||
wrapProgram $out/bin/winapps-launcher \
|
||||
|
@@ -11,12 +11,12 @@
|
||||
...
|
||||
}:
|
||||
let
|
||||
rev = "3f44fc3b0fbe1437f2fb39b178fee63f81e34bbb";
|
||||
hash = "sha256-5YOzr/Q7qfokQolTu285OPi+7cMvAiAsOP1o9nvyqPE=";
|
||||
rev = "885d02079a36aa9696de46440c5b29b95278f904";
|
||||
hash = "sha256-hkD1siuwlRNOnXpDETZEQlIb/j91hkCspAUl/m5BB6g=";
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "winapps";
|
||||
version = "0-unstable-2024-12-07";
|
||||
version = "0-unstable-2025-05-26";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "winapps-org";
|
||||
|
@@ -1,8 +1,8 @@
|
||||
diff --git a/setup.sh b/setup.sh
|
||||
index 6aa9b574..9fbefe65 100755
|
||||
index 0debe4d..6aeea08 100755
|
||||
--- a/setup.sh
|
||||
+++ b/setup.sh
|
||||
@@ -48,8 +48,8 @@ readonly SYS_BIN_PATH="/usr/local/bin" # UNIX path to 'bin' dir
|
||||
@@ -39,8 +39,8 @@ readonly SYS_BIN_PATH="/usr/local/bin" # UNIX path to 'bin' dir
|
||||
readonly USER_BIN_PATH="${HOME}/.local/bin" # UNIX path to 'bin' directory for a '--user' WinApps installation.
|
||||
readonly USER_BIN_PATH_WIN='\\tsclient\home\.local\bin' # WINDOWS path to 'bin' directory for a '--user' WinApps installation.
|
||||
# 'SOURCE'
|
||||
@@ -13,7 +13,7 @@ index 6aa9b574..9fbefe65 100755
|
||||
# 'APP'
|
||||
readonly SYS_APP_PATH="/usr/share/applications" # UNIX path to 'applications' directory for a '--system' WinApps installation.
|
||||
readonly USER_APP_PATH="${HOME}/.local/share/applications" # UNIX path to 'applications' directory for a '--user' WinApps installation.
|
||||
@@ -79,7 +79,7 @@ readonly TEST_PATH_WIN="${USER_APPDATA_PATH_WIN}\\FreeRDP_Connection_Test" # WIN
|
||||
@@ -70,7 +70,7 @@ readonly TEST_PATH_WIN="${USER_APPDATA_PATH_WIN}\\FreeRDP_Connection_Test" # WIN
|
||||
# 'WinApps Configuration File'
|
||||
readonly CONFIG_PATH="${HOME}/.config/winapps/winapps.conf" # UNIX path to the WinApps configuration file.
|
||||
# 'Inquirer Bash Script'
|
||||
@@ -21,56 +21,45 @@ index 6aa9b574..9fbefe65 100755
|
||||
+readonly INQUIRER_PATH="@out@/src/install/inquirer.sh" # UNIX path to the 'inquirer' script, which is used to produce selection menus.
|
||||
|
||||
# REMOTE DESKTOP CONFIGURATION
|
||||
readonly VM_NAME="RDPWindows" # Name of the Windows VM (FOR 'libvirt' ONLY).
|
||||
@@ -139,13 +139,13 @@ function waTerminateScript() {
|
||||
# Role: Displays usage information for the script.
|
||||
function waUsage() {
|
||||
echo -e "Usage:
|
||||
- ${COMMAND_TEXT}./setup.sh --user${CLEAR_TEXT} # Install WinApps and selected applications in ${HOME}
|
||||
- ${COMMAND_TEXT}./setup.sh --system${CLEAR_TEXT} # Install WinApps and selected applications in /usr
|
||||
- ${COMMAND_TEXT}./setup.sh --user --setupAllOfficiallySupportedApps${CLEAR_TEXT} # Install WinApps and all officially supported applications in ${HOME}
|
||||
- ${COMMAND_TEXT}./setup.sh --system --setupAllOfficiallySupportedApps${CLEAR_TEXT} # Install WinApps and all officially supported applications in /usr
|
||||
- ${COMMAND_TEXT}./setup.sh --user --uninstall${CLEAR_TEXT} # Uninstall everything in ${HOME}
|
||||
- ${COMMAND_TEXT}./setup.sh --system --uninstall${CLEAR_TEXT} # Uninstall everything in /usr
|
||||
- ${COMMAND_TEXT}./setup.sh --help${CLEAR_TEXT} # Display this usage message."
|
||||
+ ${COMMAND_TEXT}winapps-setup --user${CLEAR_TEXT} # Install WinApps and selected applications in ${HOME}
|
||||
+ ${COMMAND_TEXT}winapps-setup --system${CLEAR_TEXT} # Install WinApps and selected applications in /usr
|
||||
+ ${COMMAND_TEXT}winapps-setup --user --setupAllOfficiallySupportedApps${CLEAR_TEXT} # Install WinApps and all officially supported applications in ${HOME}
|
||||
+ ${COMMAND_TEXT}winapps-setup --system --setupAllOfficiallySupportedApps${CLEAR_TEXT} # Install WinApps and all officially supported applications in /usr
|
||||
+ ${COMMAND_TEXT}winapps-setup --user --uninstall${CLEAR_TEXT} # Uninstall everything in ${HOME}
|
||||
+ ${COMMAND_TEXT}winapps-setup --system --uninstall${CLEAR_TEXT} # Uninstall everything in /usr
|
||||
+ ${COMMAND_TEXT}winapps-setup --help${CLEAR_TEXT} # Display this usage message."
|
||||
}
|
||||
|
||||
# Name: 'waGetSourceCode'
|
||||
@@ -168,7 +168,7 @@ function waGetSourceCode() {
|
||||
$SUDO git clone --recurse-submodules --remote-submodules https://github.com/winapps-org/winapps.git "$SOURCE_PATH"
|
||||
else
|
||||
echo -e "${INFO_TEXT}WinApps installation already present at ${CLEAR_TEXT}${COMMAND_TEXT}${SOURCE_PATH}${CLEAR_TEXT}${INFO_TEXT}. Updating...${CLEAR_TEXT}"
|
||||
- $SUDO git -C "$SOURCE_PATH" pull --no-rebase
|
||||
+
|
||||
readonly RDP_PORT=3389 # Port used for RDP on Windows.
|
||||
@@ -155,13 +155,6 @@ function waGetSourceCode() {
|
||||
echo -e "${WARNING_TEXT}[WARNING]${CLEAR_TEXT} You might want to remove your old installation on '${SCRIPT_DIR_PATH}'."
|
||||
fi
|
||||
|
||||
- if [[ ! -d "$SOURCE_PATH" ]]; then
|
||||
- $SUDO git clone --recurse-submodules --remote-submodules https://github.com/winapps-org/winapps.git "$SOURCE_PATH"
|
||||
- else
|
||||
- echo -e "${INFO_TEXT}WinApps installation already present at ${CLEAR_TEXT}${COMMAND_TEXT}${SOURCE_PATH}${CLEAR_TEXT}${INFO_TEXT}. Updating...${CLEAR_TEXT}"
|
||||
- $SUDO git -C "$SOURCE_PATH" pull --no-rebase
|
||||
- fi
|
||||
-
|
||||
# Silently change the working directory.
|
||||
@@ -395,7 +395,7 @@ function waCheckExistingInstall() {
|
||||
if ! cd "$SOURCE_PATH" &>/dev/null; then
|
||||
# Display the error type.
|
||||
@@ -186,21 +179,8 @@ function waGetSourceCode() {
|
||||
# Name: 'waGetInquirer'
|
||||
# Role: Loads the inquirer script, even if the source isn't cloned yet
|
||||
function waGetInquirer() {
|
||||
- local INQUIRER=$INQUIRER_PATH
|
||||
-
|
||||
- if [ -d "$SYS_SOURCE_PATH" ]; then
|
||||
- INQUIRER=$SYS_SOURCE_PATH/$INQUIRER_PATH
|
||||
- elif [ -d "$USER_SOURCE_PATH" ] ; then
|
||||
- INQUIRER=$USER_SOURCE_PATH/$INQUIRER_PATH
|
||||
- else
|
||||
- INQUIRER="/tmp/waInquirer.sh"
|
||||
- rm -f "$INQUIRER"
|
||||
-
|
||||
- curl -o "$INQUIRER" "https://raw.githubusercontent.com/winapps-org/winapps/main/install/inquirer.sh"
|
||||
- fi
|
||||
-
|
||||
# shellcheck source=/dev/null # Exclude this file from being checked by ShellCheck.
|
||||
- source "$INQUIRER"
|
||||
+ source "$INQUIRER_PATH"
|
||||
}
|
||||
|
||||
# Display the suggested action(s).
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
- echo -e "Please remove the existing WinApps installation using ${COMMAND_TEXT}./setup.sh --user --uninstall${CLEAR_TEXT}."
|
||||
+ echo -e "Please remove the existing WinApps installation using ${COMMAND_TEXT}winapps-setup --user --uninstall${CLEAR_TEXT}."
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
|
||||
# Terminate the script.
|
||||
@@ -415,7 +415,7 @@ function waCheckExistingInstall() {
|
||||
|
||||
# Display the suggested action(s).
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
- echo -e "Please remove the existing WinApps installation using ${COMMAND_TEXT}./setup.sh --system --uninstall${CLEAR_TEXT}."
|
||||
+ echo -e "Please remove the existing WinApps installation using ${COMMAND_TEXT}winapps-setup --system --uninstall${CLEAR_TEXT}."
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
|
||||
# Terminate the script.
|
||||
@@ -810,7 +810,7 @@ function waCheckGroupMembership() {
|
||||
# Name: 'waCheckInput'
|
||||
@@ -805,7 +785,7 @@ function waCheckGroupMembership() {
|
||||
# Identify groups the current user belongs to.
|
||||
USER_GROUPS=$(groups "$(whoami)")
|
||||
|
||||
@@ -79,7 +68,7 @@ index 6aa9b574..9fbefe65 100755
|
||||
# Complete the previous line.
|
||||
echo -e "${FAIL_TEXT}Failed!${CLEAR_TEXT}\n"
|
||||
|
||||
@@ -1244,11 +1244,11 @@ function waConfigureWindows() {
|
||||
@@ -1239,11 +1219,11 @@ function waConfigureWindows() {
|
||||
# Populate variables.
|
||||
WIN_BASH="\
|
||||
#!/usr/bin/env bash
|
||||
@@ -89,11 +78,11 @@ index 6aa9b574..9fbefe65 100755
|
||||
[Desktop Entry]
|
||||
Name=Windows
|
||||
-Exec=${BIN_PATH}/winapps windows %F
|
||||
+Exec=@out/bin/winapps windows %F
|
||||
+Exec=@out@/bin/winapps windows %F
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Icon=${APPDATA_PATH}/icons/windows.svg
|
||||
@@ -1295,13 +1295,13 @@ function waConfigureApp() {
|
||||
@@ -1290,13 +1270,13 @@ function waConfigureApp() {
|
||||
# Determine the content of the bash script for the application.
|
||||
APP_BASH="\
|
||||
#!/usr/bin/env bash
|
||||
@@ -109,18 +98,27 @@ index 6aa9b574..9fbefe65 100755
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Icon=${APP_ICON}
|
||||
@@ -1631,8 +1631,8 @@ function waInstall() {
|
||||
@@ -1550,7 +1530,7 @@ function waInstall() {
|
||||
echo -e "${BOLD_TEXT}Installing WinApps.${CLEAR_TEXT}"
|
||||
|
||||
# Check for existing conflicting WinApps installations.
|
||||
- waCheckExistingInstall
|
||||
+ # waCheckExistingInstall
|
||||
|
||||
# Load the WinApps configuration file.
|
||||
waLoadConfig
|
||||
@@ -1626,8 +1606,8 @@ function waInstall() {
|
||||
waFindInstalled
|
||||
|
||||
# Install the WinApps bash scripts.
|
||||
- $SUDO ln -sf "${SOURCE_PATH}/bin/winapps" "${BIN_PATH}/winapps"
|
||||
- $SUDO ln -sf "${SOURCE_PATH}/setup.sh" "${BIN_PATH}/winapps-setup"
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
|
||||
# Configure the Windows RDP session application launcher.
|
||||
waConfigureWindows
|
||||
@@ -1682,18 +1682,15 @@ function waUninstall() {
|
||||
@@ -1677,18 +1657,15 @@ function waUninstall() {
|
||||
local DESKTOP_FILE_NAME="" # Stores the name of the '.desktop' file for the application.
|
||||
local BASH_SCRIPT_NAME="" # Stores the name of the application.
|
||||
|
||||
@@ -129,7 +127,7 @@ index 6aa9b574..9fbefe65 100755
|
||||
- $SUDO rm -f "${BIN_PATH}/winapps-setup"
|
||||
-
|
||||
# Remove WinApps configuration data, temporary files and logs.
|
||||
+ chmod -R +rw "$USER_APPDATA_PATH"
|
||||
+ chmod -R +rw "$USER_APPDATA_PATH"
|
||||
rm -rf "$USER_APPDATA_PATH"
|
||||
|
||||
# Remove application icons and shortcuts.
|
||||
@@ -141,7 +139,7 @@ index 6aa9b574..9fbefe65 100755
|
||||
|
||||
# Remove each '.desktop' file.
|
||||
for DESKTOP_FILE_PATH in "${WINAPPS_DESKTOP_FILES[@]}"; do
|
||||
@@ -1714,7 +1711,7 @@ function waUninstall() {
|
||||
@@ -1709,7 +1686,7 @@ function waUninstall() {
|
||||
done
|
||||
|
||||
# Store the paths of bash scripts calling 'WinApps' to launch specific applications in an array, returning an empty array if no such files exist.
|
||||
@@ -150,7 +148,7 @@ index 6aa9b574..9fbefe65 100755
|
||||
|
||||
# Remove each bash script.
|
||||
for BASH_SCRIPT_PATH in "${WINAPPS_APP_BASH_SCRIPTS[@]}"; do
|
||||
@@ -1735,10 +1732,9 @@ function waUninstall() {
|
||||
@@ -1730,10 +1707,9 @@ function waUninstall() {
|
||||
done
|
||||
|
||||
# Print caveats.
|
||||
|
58
setup.sh
58
setup.sh
@@ -73,7 +73,6 @@ readonly CONFIG_PATH="${HOME}/.config/winapps/winapps.conf" # UNIX path to the W
|
||||
readonly INQUIRER_PATH="./install/inquirer.sh" # UNIX path to the 'inquirer' script, which is used to produce selection menus.
|
||||
|
||||
# REMOTE DESKTOP CONFIGURATION
|
||||
readonly VM_NAME="RDPWindows" # Name of the Windows VM (FOR 'libvirt' ONLY).
|
||||
readonly RDP_PORT=3389 # Port used for RDP on Windows.
|
||||
readonly DOCKER_IP="127.0.0.1" # Localhost.
|
||||
|
||||
@@ -85,17 +84,18 @@ OPT_UNINSTALL=0 # Set to '1' if the user specifies '--uninstall'.
|
||||
OPT_AOSA=0 # Set to '1' if the user specifies '--setupAllOfficiallySupportedApps'.
|
||||
|
||||
# WINAPPS CONFIGURATION FILE
|
||||
RDP_USER="" # Imported variable.
|
||||
RDP_PASS="" # Imported variable.
|
||||
RDP_DOMAIN="" # Imported variable.
|
||||
RDP_IP="" # Imported variable.
|
||||
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.
|
||||
RDP_USER="" # Imported variable.
|
||||
RDP_PASS="" # Imported variable.
|
||||
RDP_DOMAIN="" # Imported variable.
|
||||
RDP_IP="" # Imported variable.
|
||||
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.
|
||||
|
||||
# PERMISSIONS AND DIRECTORIES
|
||||
SUDO="" # Set to "sudo" if the user specifies '--system', or "" if the user specifies '--user'.
|
||||
@@ -130,13 +130,13 @@ function waTerminateScript() {
|
||||
# Role: Displays usage information for the script.
|
||||
function waUsage() {
|
||||
echo -e "Usage:
|
||||
${COMMAND_TEXT}./setup.sh --user${CLEAR_TEXT} # Install WinApps and selected applications in ${HOME}
|
||||
${COMMAND_TEXT}./setup.sh --system${CLEAR_TEXT} # Install WinApps and selected applications in /usr
|
||||
${COMMAND_TEXT}./setup.sh --user --setupAllOfficiallySupportedApps${CLEAR_TEXT} # Install WinApps and all officially supported applications in ${HOME}
|
||||
${COMMAND_TEXT}./setup.sh --system --setupAllOfficiallySupportedApps${CLEAR_TEXT} # Install WinApps and all officially supported applications in /usr
|
||||
${COMMAND_TEXT}./setup.sh --user --uninstall${CLEAR_TEXT} # Uninstall everything in ${HOME}
|
||||
${COMMAND_TEXT}./setup.sh --system --uninstall${CLEAR_TEXT} # Uninstall everything in /usr
|
||||
${COMMAND_TEXT}./setup.sh --help${CLEAR_TEXT} # Display this usage message."
|
||||
${COMMAND_TEXT} --user${CLEAR_TEXT} # Install WinApps and selected applications in ${HOME}
|
||||
${COMMAND_TEXT} --system${CLEAR_TEXT} # Install WinApps and selected applications in /usr
|
||||
${COMMAND_TEXT} --user --setupAllOfficiallySupportedApps${CLEAR_TEXT} # Install WinApps and all officially supported applications in ${HOME}
|
||||
${COMMAND_TEXT} --system --setupAllOfficiallySupportedApps${CLEAR_TEXT} # Install WinApps and all officially supported applications in /usr
|
||||
${COMMAND_TEXT} --user --uninstall${CLEAR_TEXT} # Uninstall everything in ${HOME}
|
||||
${COMMAND_TEXT} --system --uninstall${CLEAR_TEXT} # Uninstall everything in /usr
|
||||
${COMMAND_TEXT} --help${CLEAR_TEXT} # Display this usage message."
|
||||
}
|
||||
|
||||
# Name: 'waGetSourceCode'
|
||||
@@ -149,7 +149,7 @@ function waGetSourceCode() {
|
||||
SCRIPT_DIR_PATH=$(readlink -f "$(dirname "${BASH_SOURCE[0]}")")
|
||||
|
||||
# Check if winapps is currently installed on $SOURCE_PATH
|
||||
if [ -f "$SCRIPT_DIR_PATH/winapps" ] && [ "$SCRIPT_DIR_PATH" -ne "$SOURCE_PATH" ]; then
|
||||
if [[ -f "$SCRIPT_DIR_PATH/winapps" && "$SCRIPT_DIR_PATH" -ne "$SOURCE_PATH" ]]; then
|
||||
# Display a warning.
|
||||
echo -e "${WARNING_TEXT}[WARNING]${CLEAR_TEXT} You are running a WinApps installation located outside of default location '${SOURCE_PATH}'. A new installation will be created."
|
||||
echo -e "${WARNING_TEXT}[WARNING]${CLEAR_TEXT} You might want to remove your old installation on '${SCRIPT_DIR_PATH}'."
|
||||
@@ -188,7 +188,11 @@ function waGetSourceCode() {
|
||||
function waGetInquirer() {
|
||||
local INQUIRER=$INQUIRER_PATH
|
||||
|
||||
if [ ! -d "$SYS_SOURCE_PATH" ] && [ ! -d "$USER_SOURCE_PATH" ]; then
|
||||
if [ -d "$SYS_SOURCE_PATH" ]; then
|
||||
INQUIRER=$SYS_SOURCE_PATH/$INQUIRER_PATH
|
||||
elif [ -d "$USER_SOURCE_PATH" ] ; then
|
||||
INQUIRER=$USER_SOURCE_PATH/$INQUIRER_PATH
|
||||
else
|
||||
INQUIRER="/tmp/waInquirer.sh"
|
||||
rm -f "$INQUIRER"
|
||||
|
||||
@@ -386,7 +390,7 @@ function waCheckExistingInstall() {
|
||||
|
||||
# Display the suggested action(s).
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
echo -e "Please remove the existing WinApps installation using ${COMMAND_TEXT}./setup.sh --user --uninstall${CLEAR_TEXT}."
|
||||
echo -e "Please remove the existing WinApps installation using ${COMMAND_TEXT}winapps-setup --user --uninstall${CLEAR_TEXT}."
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
|
||||
# Terminate the script.
|
||||
@@ -406,7 +410,7 @@ function waCheckExistingInstall() {
|
||||
|
||||
# Display the suggested action(s).
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
echo -e "Please remove the existing WinApps installation using ${COMMAND_TEXT}./setup.sh --system --uninstall${CLEAR_TEXT}."
|
||||
echo -e "Please remove the existing WinApps installation using ${COMMAND_TEXT}winapps-setup --system --uninstall${CLEAR_TEXT}."
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
|
||||
# Terminate the script.
|
||||
@@ -1042,7 +1046,7 @@ function waCheckRDPAccess() {
|
||||
+home-drive \
|
||||
-wallpaper \
|
||||
+dynamic-resolution \
|
||||
/app:program:"C:\Windows\System32\cmd.exe",cmd:"/C type NUL > "$TEST_PATH_WIN" && tsdiscon" \
|
||||
/app:program:"C:\Windows\System32\cmd.exe",cmd:"/C type NUL > $TEST_PATH_WIN && tsdiscon" \
|
||||
/v:"$RDP_IP" &>"$FREERDP_LOG" &
|
||||
|
||||
# Store the FreeRDP process ID.
|
||||
@@ -1649,13 +1653,13 @@ function waInstall() {
|
||||
# Name: 'waEnsureOnPath'
|
||||
# Role: Ensures that $BIN_PATH is on $PATH.
|
||||
function waEnsureOnPath() {
|
||||
if [[ ":$PATH:" == *":$BIN_PATH:"* ]]; then
|
||||
if [[ ":$PATH:" != *":$BIN_PATH:"* ]]; then
|
||||
echo -e "${WARNING_TEXT}[WARNING]${CLEAR_TEXT} It seems like '${BIN_PATH}' is not on PATH."
|
||||
echo -e "${WARNING_TEXT}[WARNING]${CLEAR_TEXT} You can add it by running:"
|
||||
# shellcheck disable=SC2086
|
||||
echo -e "${WARNING_TEXT}[WARNING]${CLEAR_TEXT} - For Bash: ${COMMAND_TEXT}echo 'export PATH="${BIN_PATH}:\$PATH"' >> ~/.bashrc${CLEAR_TEXT}"
|
||||
echo -e "${WARNING_TEXT}[WARNING]${CLEAR_TEXT} - For Bash: ${COMMAND_TEXT}echo 'export PATH="${BIN_PATH}:\$PATH"' >> ~/.bashrc && source ~/.bashrc${CLEAR_TEXT}"
|
||||
# shellcheck disable=SC2086
|
||||
echo -e "${WARNING_TEXT}[WARNING]${CLEAR_TEXT} - For ZSH: ${COMMAND_TEXT}echo 'export PATH="${BIN_PATH}:\$PATH"' >> ~/.zshrc${CLEAR_TEXT}"
|
||||
echo -e "${WARNING_TEXT}[WARNING]${CLEAR_TEXT} - For ZSH: ${COMMAND_TEXT}echo 'export PATH="${BIN_PATH}:\$PATH"' >> ~/.zshrc && source ~/.zshrc${CLEAR_TEXT}"
|
||||
echo -e "${WARNING_TEXT}[WARNING]${CLEAR_TEXT} Make sure to restart your Terminal afterwards.\n"
|
||||
fi
|
||||
}
|
||||
|
Reference in New Issue
Block a user