Skip to content

Commit

Permalink
Merge pull request #45 from mainframe2/master
Browse files Browse the repository at this point in the history
Frame App 7.5.0 support
  • Loading branch information
rneher-igel committed Sep 30, 2024
2 parents b4a8121 + 5e4498a commit 7790cb2
Show file tree
Hide file tree
Showing 12 changed files with 257 additions and 77 deletions.
Binary file modified CP_Packages/Apps/Frame.zip
Binary file not shown.
157 changes: 143 additions & 14 deletions CP_Source/Apps/Frame/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Frame (22 June)
# Frame (22 Aug 2024)

-----

Expand Down Expand Up @@ -53,6 +53,128 @@ set up *Firmware Customization -> Custom Partition -> Download* with your UMS se

## Frame App Releases

### Frame App 7.5.0 (GA)

Published on July 23, 2024

**Added:**

Command line arguments:

| Action | Argument/Example |
| -------- | ------- |
| Show Help Menu | Frame.exe -- --help |
| Show Version | Frame.exe -- --version |
| Hide Menu Bar | Frame.exe --hide-menu-bar=ON |
| Hide fullscreen toggle | Frame.exe -- --hide-toggle-fullscreen=ON |
| Enable Hardware Acceleration | Frame.exe -- --use-experimental-gpu-flags=ON |

(IGEL) Command line arguments are now configurable via settings in the IGEL UI.

**Fixed:**

- Issue where the generic USB driver may not uninstall properly from peripheral device when using Generic USB Redirection.
- (IGEL) Issue with kiosk mode script not working properly.

### Frame App 7.4.0 (GA)

Published on March 18, 2024

**Added:**

- Upgraded to Electron version 28.2.7.
- Integrated with Chromium version 120.
- Users may now navigate to View > Show GPU Internals to see an in-depth GPU hardware acceleration report.
- Frame App can now be configured to start both the application and sessions in full screen mode (a.k.a. "kiosk mode").
- Hardware acceleration can now be disabled via toggle in the Frame > Preferences menu.

**Fixed:**

- (Windows, Linux) Issue where keyboard input was not correctly refocusing on the Frame App window after switching between local desktops using CTRL + Windows Key + Arrow or Ctrl + Alt + Arrow (Linux).
- Additional reliability and optimization fixes.

**Known Limitations:**

- USB mass storage devices are not supported with Generic USB Redirection. Please use the Upload / Download feature.
- USB devices that require isochronous data transfers are not supported with Generic USB Redirection.
- (Linux) Auto-update feature is disabled by design for Linux endpoints.

### Frame App 7.3.0 (Early access)

Published on January 25, 2024

**Added:**

- (macOS) USB device redirection is now supported. Users wishing to take advantage of this feature must grant permissions to the Frame USB Helper upon the first launch of the application.
- The underlying Chromium engine has been upgraded to version 118, ensuring a more robust and secure experience.

**Fixed:**

(Windows) Resolved an issue where keyboard redirection for certain shortcuts using special keys would not work when microphone functionality was enabled.

### Frame App 7.2.0 (Tech preview)

Published on November 30, 2023

**Added:**

- USB device names are more descriptive, displaying the vendor name and USB device class/subclass.
- The Frame App menu bar is now hidden when entering full screen mode.
- Users can now exit full screen mode by long-pressing Esc key.
- Full-screen toggling is now synchronized across all displays in a multi-monitor setup.
- (Windows) New log for the Frame App Service (used for Generic USB Redirection support) can be found here: C:\Windows\_System32_\config\systemprofile\AppData\Roaming\Frame\Logs
- (macOS) Automatic updates for Frame App are now enabled.
-(Linux) Keyboard redirection in Frame App for Linux now interprets the following key combinations:
- Alt + Tab
- Shift + Alt + Tab
- Meta + Tab
- Shift + Meta + Tab
- Meta

**Fixed:**

- Issue where device driver switching (as part of Generic USB Redirection feature) could not be canceled once initiated when exiting Frame App.
- (Windows) Issue when Frame App is forcefully stopped (e.g. terminating the Frame App Service through Task Manager) any USB devices that were switched by Frame App to leverage WinUSB instead of its native driver (due to compatibility issues) would not automatically rollback to using its native driver.
- (Windows) Issue where pressing the Windows key would, on occasion, open the local Windows Start Menu on the endpoint OS instead of passing it through to the Frame session.
- (Windows) Frame App installer now skips the Visual C++ (x64) Redistributable installation if it is already present.
- (macOS) Issue where gray bars would appear on the window edges when Frame App entered full-screen mode with the hideStatusBarOnFullscreen Advanced Terminal Argument set.
Additional reliability and optimization fixes.

**Known Limitations:**

- USB mass storage devices are not supported with Generic USB Redirection. Please use the Upload / Download feature.
- USB devices that require isochronous data transfers are not supported with Generic USB Redirection.
- Frame App’s kiosk mode feature is no longer available with Frame App 7.x. This was removed due to security concerns as kiosk-type experiences should be configured at the OS.
- (Windows) Keyboard redirection for certain shortcuts using special keys will not work when microphone functionality is enabled. Will be fixed in future release.
- (macOS) FIDO2/WebAuthn hardware authentication tokens are not supported with this release. Will be available in future release.
- (Linux) Auto-update feature is disabled by design for Linux endpoints.

### Frame App 7.1.0 (Early access)

Published on September 7, 2023

**Added:**
(Windows) Changed installation directory from C:\Program Files (x86)\Frame to C:\Program Files\Frame.
(Linux) Generic USB Redirection support (including support for FIDO2/WebAuthn hardware authentication tokens).

**Fixed:**
- Issue where USB device cannot be reconnected after it is detached from the session.
- Issue where users can launch second instance of Frame App. Attempts to start a second instance simply brings existing Frame App instance window to the front.
- (Windows) Issue where the FrameAppService may fail to start on when installing Frame App on Windows 10 or 11.
- (Windows) Issue where resizing Frame App window using mouse cursor was not possible.
- (Windows) Issue where pressing the Windows key on endpoint device results in the Windows Start Menu opening on both the local device and within the Frame session. Now Windows Start Menu only opens within the Frame session when Frame App window is in focus.
- (macOS) Issue where Frame App may crash on first launch.
- (macOS, Linux) Issue where modifier keys (e.g. Alt + Tab) are not properly passed into session when accessing a Windows workload VM.

**Known Limitations:**

- USB mass storage devices are not supported with Generic USB Redirection. Please use the Upload / Download feature.
- USB devices that require isochronous data transfers are not supported with Generic USB Redirection.
- (macOS) Auto-update from Frame App 7.0.x to 7.1.0 will not work. Customers should uninstall the previous version and then install the new version. Auto-update from Frame App 7.1.0 to future versions will work as expected.
- (macOS) Kiosk mode is not supported with this release. Will be available in future release.
- (macOS) FIDO2/WebAuthn hardware authentication tokens are not supported with this release. Will be available in future release.
- (Linux) Auto-update feature is disabled by design for Linux endpoints.

### Frame App 7.0.21 (Tech Preview)

Published on June 2, 2023
Expand Down Expand Up @@ -109,28 +231,34 @@ General

To get started, read each of the following profiles to see which sounds like the right fit for you and then import it into the IGEL UMS following the instructions below.

### Important notice

IGEL UMS-11 profiles has ***-ums11.xml** in their name.
IGEL UMS-12 profiles has ***-ums12.ipm** in their name

IGEL UMS-11 profiles by default will provide support for Frame App v7 only! If support for frame app v6 is required, before importing profiles user will need to modify following line in XML file:

```
<ivalue classname="sessions.custom_application%.cmdline" variableExpression="" variableSubstitutionActive="false">/custom/frame/frame-saml2-kiosk-launcher.sh v7</ivalue>
```
by replacing "v7" with "v6", so that script will know which version of app to start and other configurations.


### Basic Frame App Profile
**IGEL UMS-11 command:**
```js
import 'igel/frame-app-basic-profile.xml'
import 'igel/frame-app-basic-profile-ums11.xml'
```

This Custom Profiles simply enables a Frame App icon on the IGEL Desktop. To launch Frame App with certain command line arguments, edit IGEL profile and append your command line argument(s) to the end of the command line.

Below is a table of [Linux command-line arguments for Frame App](https://docs.fra.me/platform/session/frame-app/config/?operating-systems=linux#frapp-args):

| Command Line Argument | Description | Syntax |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- |
| `disable-mouse-lock` | By default, Frame App will ignore mouse forward/back button events. If this argument is used, Frame App will respond to mouse forward/back button events. When a user is in session, these mouse events can cause the user to exit their session accidentally. | `./Frame --disable-mouse-lock` |
| `displays-auto-arrange` | Frame App will launch with virtual displays configured to match your local environment. | `./Frame --displays-auto-arrange` |
| `kiosk` | Instructs Frame App to launch in full screen, a.k.a. “Kiosk mode.” | `./Frame --kiosk` |
| `url` | Designates the startup URL. | `./Frame --url=console.nutanix.com` |
| `x11-window` | Switch from GTK (default) to X11 Windows. This argument should be used with HP ThinPro OS clients. | `./Frame --x11-window` |
Command line arguments for Frame app are defined here: [Linux command-line arguments](https://docs.dizzion.com/platform/session/frame-app/config#command-line-arguments).

---
### Frame SAML2 Kiosk Mode Profile

**IGEL UMS-11 command:**
```js
import 'igel/frame-saml2-kiosk-profile.xml'
import 'igel/frame-saml2-kiosk-profile-ums11.xml'
```

This profile is designed to support a specific end user workflow and assumes a particular Frame configuration.
Expand Down Expand Up @@ -162,8 +290,9 @@ This profile is designed to support a specific end user workflow and assumes a p
---

### Frame SAT Kiosk Mode Profile
**IGEL UMS-11 command:**
```js
import 'igel/frame-sat-kiosk-profile.xml'
import 'igel/frame-sat-kiosk-profile-ums11.xml'
```

The Frame SAT Kiosk Custom Profile is designed to support a specific end user workflow relying on Frame's SATs or [Secure Anonymous Tokens](https://docs.fra.me/platform/identity-and-access/secure-anonymous-tokens/) for identity; this flow also assumes a particular Frame configuration to support the kiosk experience as defined below.
Expand Down
84 changes: 49 additions & 35 deletions CP_Source/Apps/Frame/build/frame-saml2-kiosk-launcher.sh
Original file line number Diff line number Diff line change
Expand Up @@ -24,78 +24,92 @@
#
# FRAME_LAUNCH_URL - obtained from Dashboard > Launchpad > Advanced Integrations for the Launch Link. The FRAME_LAUNCH_URL could be a Launchpad URL.
#
# The following command line arguments must be set:
# Frame application version, valid values are: 'v6' and 'v7'
# Example 1: frame-sat-kiosk-launcher.sh v6
# Example 2: frame-sat-kiosk-launcher.sh v7
#
# Visit Frame's documentation at https://docs.frame.nutanix.com
#
# Updated August 10, 2022
# Updated August 13, 2024
#

logMessage() {
local TODAY=$(date +"%F")
echo "[Frame][$(date)]: $1" >> "/userhome/.frame/log-$TODAY.log"
}

# Check if all the required variables are set correctly
if [ -z "${FRAME_LAUNCH_URL}" ] ; then
if [ -z "${FRAME_LAUNCH_URL}" ]; then
echo "Please fill the FRAME_LAUNCH_URL environment variable."
exit 1
fi

### Frame Functions
# Check if all required command line arguments are set correctly
if [ $# -eq 0 ]; then
logMessage "Script is started with 0 arguments! Argument arg1 should have application version set. Please check Frame documentation!"
exit 1
fi

# Setup Logging directory
if [ ! -e /userhome/.frame ]; then
mkdir /userhome/.frame/
mkdir -p /userhome/.frame/
fi

logMessage() {
local TODAY=$(date +"%F")
echo "[Frame][$(date)]: $1" >> "/userhome/.frame/log-$TODAY.log"
}

# Check for another instance is running.
if [[ `pgrep -f $0` != "$$" ]]; then
# Check for another instance is running
if [[ $(pgrep -f "$0") != "$$" ]]; then
logMessage "Process already running. Exiting."
exit 1
fi

# Cache path based on Frame App version
LEGACY_FRAME_CACHE_PATH="/custom/frame/userhome/.Nutanix/Frame/cache"
FRAME_CACHE_PATH="/custom/frame/userhome/.config/Frame/Cache /custom/frame/userhome/.config/Frame/Cookies /custom/frame/userhome/.config/Frame/Local Storage"

# Frame App path and CLI separator
# Variables
FRAME_APP_VERSION="${1,,}" # Read first argument and convert it to lowercase
FRAME_CACHE_PATHS=("/custom/frame/userhome/.config/Frame/Cache" "/custom/frame/userhome/.config/Frame/Cookies" "/custom/frame/userhome/.config/Frame/Local Storage")
FRAME_APP_PATH="/custom/frame/usr/bin/frame"
LEGACY_FRAMEAPP=false

# Check Frame App version
case $FRAME_APP_VERSION in
"v6" | "v7")
logMessage "Script is working with Frame App version: $FRAME_APP_VERSION"
;;
*)
logMessage "Script is working with version: '$FRAME_APP_VERSION' that's invalid or unknown! Script will exit now."
exit 1
;;
esac

# Check if the legacy Frame App version is installed
if [ -x "/custom/frame/usr/bin/nutanix-frame/Frame" ]; then
if [ "$FRAME_APP_VERSION" = "v6" ]; then
logMessage "Legacy Frame App installed."
FRAME_APP_PATH="/custom/frame/usr/bin/nutanix-frame/Frame"
LEGACY_FRAMEAPP=true
FRAME_CACHE_PATHS=("/custom/frame/userhome/.Nutanix/Frame/cache")
fi

launchFrame() {
# Clear cache from previous session based on the Frame App version
cache_path="$FRAME_CACHE_PATH"
if [ "$FRAME_APP_PATH" = "/custom/frame/usr/bin/nutanix-frame/Frame" ]; then
cache_path="$LEGACY_FRAME_CACHE_PATH"
fi
rm -Rf "$cache_path"
# Clear cache from previous session
for path in "${FRAME_CACHE_PATHS[@]}"; do
rm -Rf "$path"
done

# Run Frame App in kiosk mode, auto-arrange displays if more than one monitor attached, using FRAME_LAUNCH_URL with Secure Anonymous Token
if [ -n "$LEGACY_FRAMEAPP" ]; then
"$FRAME_APP_PATH" -- --kiosk-mode --displays-auto-arrange --startup-url="$FRAME_LAUNCH_URL#token=$token" &
# Run Frame App in kiosk mode, auto-arrange displays if more than one monitor attached, using FRAME_LAUNCH_URL
if [ "$FRAME_APP_VERSION" = "v7" ]; then
"$FRAME_APP_PATH" -- --full-screen --start-session-in-full-screen=on --startup-url="$FRAME_LAUNCH_URL" &
logMessage "App is launched. Result: $?"
else
"$FRAME_APP_PATH" --kiosk --displays-auto-arrange --url="$FRAME_LAUNCH_URL#token=$token" &
"$FRAME_APP_PATH" --kiosk --displays-auto-arrange --url="$FRAME_LAUNCH_URL" &
logMessage "App is launched. Result: $?"
fi
}

monitorFrameApp() {

echo "Monitoring Frame App..."
while true
do
if [[ $(ps -ef | grep -c "/custom/frame/usr/bin/nutanix-frame/Frame") -ne 1 ]]; then
while true; do
if [[ $(ps -ef | grep "$FRAME_APP_PATH" | grep -v grep | wc -l) -ne 0 ]]; then
echo "App is running."
else
echo "App isn't running! :)"
echo "App isn't running!"
launchFrame
fi

sleep 3
done
}
Expand Down
Loading

0 comments on commit 7790cb2

Please sign in to comment.