mirror of
https://github.com/kasmtech/KasmVNC.git
synced 2025-06-28 05:31:49 +02:00
rebase and fix merge conflicts
This commit is contained in:
commit
75c51c1e93
@ -89,3 +89,26 @@ detect_revision() {
|
|||||||
|
|
||||||
REVISION=$(echo "$package" | sed "s/_${arch}.\+//" | sed 's/.\++//')
|
REVISION=$(echo "$package" | sed "s/_${arch}.\+//" | sed 's/.\++//')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
make_index_html() {
|
||||||
|
local body=""
|
||||||
|
local bname
|
||||||
|
|
||||||
|
for f in "$@"; do
|
||||||
|
bname=$(basename "$f")
|
||||||
|
body="${body}<a href=/$f>$bname</a><br>"
|
||||||
|
done
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
<!doctype html>
|
||||||
|
<html lang=en>
|
||||||
|
<head>
|
||||||
|
<meta charset=utf-8>
|
||||||
|
<title>KasmVNC preview build</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
$body
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
262
.gitlab-ci.yml
262
.gitlab-ci.yml
@ -99,23 +99,6 @@ build_ubuntu_bionic_arm:
|
|||||||
paths:
|
paths:
|
||||||
- output/
|
- output/
|
||||||
|
|
||||||
build_ubuntu_bionic_libjpeg_turbo:
|
|
||||||
stage: build
|
|
||||||
allow_failure: false
|
|
||||||
before_script:
|
|
||||||
- *prepare_build
|
|
||||||
- *prepare_www
|
|
||||||
after_script:
|
|
||||||
- *prepare_artfacts
|
|
||||||
script:
|
|
||||||
- bash builder/build-package ubuntu bionic +libjpeg-turbo_latest
|
|
||||||
only:
|
|
||||||
variables:
|
|
||||||
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- output/
|
|
||||||
|
|
||||||
build_ubuntu_focal:
|
build_ubuntu_focal:
|
||||||
stage: build
|
stage: build
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
@ -260,6 +243,43 @@ build_debian_bullseye_arm:
|
|||||||
paths:
|
paths:
|
||||||
- output/
|
- output/
|
||||||
|
|
||||||
|
|
||||||
|
build_debian_bookworm:
|
||||||
|
stage: build
|
||||||
|
allow_failure: true
|
||||||
|
before_script:
|
||||||
|
- *prepare_build
|
||||||
|
- *prepare_www
|
||||||
|
after_script:
|
||||||
|
- *prepare_artfacts
|
||||||
|
script:
|
||||||
|
- bash builder/build-package debian bookworm;
|
||||||
|
only:
|
||||||
|
variables:
|
||||||
|
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- output/
|
||||||
|
|
||||||
|
build_debian_bookworm_arm:
|
||||||
|
stage: build
|
||||||
|
allow_failure: true
|
||||||
|
tags:
|
||||||
|
- oci-fixed-arm64
|
||||||
|
before_script:
|
||||||
|
- *prepare_build
|
||||||
|
- *prepare_www
|
||||||
|
after_script:
|
||||||
|
- *prepare_artfacts
|
||||||
|
script:
|
||||||
|
- bash builder/build-package debian bookworm;
|
||||||
|
only:
|
||||||
|
variables:
|
||||||
|
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- output/
|
||||||
|
|
||||||
build_kali_rolling:
|
build_kali_rolling:
|
||||||
stage: build
|
stage: build
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
@ -349,6 +369,42 @@ build_oracle_8_arm:
|
|||||||
paths:
|
paths:
|
||||||
- output/
|
- output/
|
||||||
|
|
||||||
|
build_oracle_9:
|
||||||
|
stage: build
|
||||||
|
allow_failure: true
|
||||||
|
before_script:
|
||||||
|
- *prepare_build
|
||||||
|
- *prepare_www
|
||||||
|
after_script:
|
||||||
|
- *prepare_artfacts
|
||||||
|
script:
|
||||||
|
- bash builder/build-package oracle 9;
|
||||||
|
only:
|
||||||
|
variables:
|
||||||
|
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- output/
|
||||||
|
|
||||||
|
build_oracle_9_arm:
|
||||||
|
stage: build
|
||||||
|
allow_failure: true
|
||||||
|
tags:
|
||||||
|
- oci-fixed-arm64
|
||||||
|
before_script:
|
||||||
|
- *prepare_build
|
||||||
|
- *prepare_www
|
||||||
|
after_script:
|
||||||
|
- *prepare_artfacts
|
||||||
|
script:
|
||||||
|
- bash builder/build-package oracle 9;
|
||||||
|
only:
|
||||||
|
variables:
|
||||||
|
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- output/
|
||||||
|
|
||||||
build_opensuse_15:
|
build_opensuse_15:
|
||||||
stage: build
|
stage: build
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
@ -385,6 +441,114 @@ build_opensuse_15_arm:
|
|||||||
paths:
|
paths:
|
||||||
- output/
|
- output/
|
||||||
|
|
||||||
|
build_fedora_thirtyseven:
|
||||||
|
stage: build
|
||||||
|
allow_failure: true
|
||||||
|
before_script:
|
||||||
|
- *prepare_build
|
||||||
|
- *prepare_www
|
||||||
|
after_script:
|
||||||
|
- *prepare_artfacts
|
||||||
|
script:
|
||||||
|
- bash builder/build-package fedora thirtyseven;
|
||||||
|
only:
|
||||||
|
variables:
|
||||||
|
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- output/
|
||||||
|
|
||||||
|
build_fedora_thirtyseven_arm:
|
||||||
|
stage: build
|
||||||
|
allow_failure: true
|
||||||
|
tags:
|
||||||
|
- oci-fixed-arm64
|
||||||
|
before_script:
|
||||||
|
- *prepare_build
|
||||||
|
- *prepare_www
|
||||||
|
after_script:
|
||||||
|
- *prepare_artfacts
|
||||||
|
script:
|
||||||
|
- bash builder/build-package fedora thirtyseven;
|
||||||
|
only:
|
||||||
|
variables:
|
||||||
|
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- output/
|
||||||
|
|
||||||
|
build_fedora_thirtyeight:
|
||||||
|
stage: build
|
||||||
|
allow_failure: true
|
||||||
|
before_script:
|
||||||
|
- *prepare_build
|
||||||
|
- *prepare_www
|
||||||
|
after_script:
|
||||||
|
- *prepare_artfacts
|
||||||
|
script:
|
||||||
|
- bash builder/build-package fedora thirtyeight;
|
||||||
|
only:
|
||||||
|
variables:
|
||||||
|
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- output/
|
||||||
|
|
||||||
|
build_fedora_thirtyeight_arm:
|
||||||
|
stage: build
|
||||||
|
allow_failure: true
|
||||||
|
tags:
|
||||||
|
- oci-fixed-arm64
|
||||||
|
before_script:
|
||||||
|
- *prepare_build
|
||||||
|
- *prepare_www
|
||||||
|
after_script:
|
||||||
|
- *prepare_artfacts
|
||||||
|
script:
|
||||||
|
- bash builder/build-package fedora thirtyeight;
|
||||||
|
only:
|
||||||
|
variables:
|
||||||
|
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- output/
|
||||||
|
|
||||||
|
build_alpine_317:
|
||||||
|
stage: build
|
||||||
|
allow_failure: true
|
||||||
|
before_script:
|
||||||
|
- *prepare_build
|
||||||
|
- *prepare_www
|
||||||
|
after_script:
|
||||||
|
- *prepare_artfacts
|
||||||
|
script:
|
||||||
|
- bash builder/build-package alpine 317;
|
||||||
|
only:
|
||||||
|
variables:
|
||||||
|
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- output/
|
||||||
|
|
||||||
|
build_alpine_317_arm:
|
||||||
|
stage: build
|
||||||
|
allow_failure: true
|
||||||
|
tags:
|
||||||
|
- oci-fixed-arm64
|
||||||
|
before_script:
|
||||||
|
- *prepare_build
|
||||||
|
- *prepare_www
|
||||||
|
after_script:
|
||||||
|
- *prepare_artfacts
|
||||||
|
script:
|
||||||
|
- bash builder/build-package alpine 317;
|
||||||
|
only:
|
||||||
|
variables:
|
||||||
|
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- output/
|
||||||
|
|
||||||
test:
|
test:
|
||||||
stage: test
|
stage: test
|
||||||
before_script:
|
before_script:
|
||||||
@ -392,9 +556,49 @@ test:
|
|||||||
script:
|
script:
|
||||||
- bash builder/test-vncserver
|
- bash builder/test-vncserver
|
||||||
|
|
||||||
|
|
||||||
|
build_alpine_318:
|
||||||
|
stage: build
|
||||||
|
allow_failure: true
|
||||||
|
before_script:
|
||||||
|
- *prepare_build
|
||||||
|
- *prepare_www
|
||||||
|
after_script:
|
||||||
|
- *prepare_artfacts
|
||||||
|
script:
|
||||||
|
- bash builder/build-package alpine 318;
|
||||||
|
only:
|
||||||
|
variables:
|
||||||
|
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- output/
|
||||||
|
|
||||||
|
build_alpine_318_arm:
|
||||||
|
stage: build
|
||||||
|
allow_failure: true
|
||||||
|
tags:
|
||||||
|
- oci-fixed-arm64
|
||||||
|
before_script:
|
||||||
|
- *prepare_build
|
||||||
|
- *prepare_www
|
||||||
|
after_script:
|
||||||
|
- *prepare_artfacts
|
||||||
|
script:
|
||||||
|
- bash builder/build-package alpine 318;
|
||||||
|
only:
|
||||||
|
variables:
|
||||||
|
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- output/
|
||||||
|
|
||||||
upload:
|
upload:
|
||||||
stage: upload
|
stage: upload
|
||||||
image: ubuntu:focal
|
image: ubuntu:focal
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- output/
|
||||||
before_script:
|
before_script:
|
||||||
- . .ci/upload.sh
|
- . .ci/upload.sh
|
||||||
script:
|
script:
|
||||||
@ -411,12 +615,32 @@ upload:
|
|||||||
done
|
done
|
||||||
- export S3_BUILD_DIRECTORY="kasmvnc/${CI_COMMIT_SHA}"
|
- export S3_BUILD_DIRECTORY="kasmvnc/${CI_COMMIT_SHA}"
|
||||||
- export RELEASE_VERSION=$(.ci/next_release_version "$CI_COMMIT_REF_NAME")
|
- export RELEASE_VERSION=$(.ci/next_release_version "$CI_COMMIT_REF_NAME")
|
||||||
- for package in `find output/ -type f -name '*.deb' -or -name '*.rpm'`; do
|
- uploaded_files=()
|
||||||
|
- for package in `find output/ -type f -name '*.deb' -or -name '*.rpm' -or -name '*.tgz'`; do
|
||||||
prepare_upload_filename "$package";
|
prepare_upload_filename "$package";
|
||||||
upload_filename="${S3_BUILD_DIRECTORY}/$upload_filename";
|
upload_filename="${S3_BUILD_DIRECTORY}/$upload_filename";
|
||||||
echo;
|
echo;
|
||||||
echo "File to upload $upload_filename";
|
echo "File to upload $upload_filename";
|
||||||
upload_to_s3 "$package" "$upload_filename" "$S3_BUCKET";
|
upload_to_s3 "$package" "$upload_filename" "$S3_BUCKET";
|
||||||
UPLOAD_NAME=$(basename $upload_filename | sed 's#kasmvncserver_##' | sed -r 's#_([0-9]{1,3}\.){2}[0-9]{1,2}_\S+?([a-f0-9]{6})##' | sed -r 's#\.(deb|rpm)##');
|
UPLOAD_NAME=$(basename $upload_filename | sed 's#kasmvncserver_##' | sed -r 's#_([0-9]{1,3}\.){2}[0-9]{1,2}_\S+?([a-f0-9]{6})##' | sed -r 's#\.(deb|rpm|tgz)##');
|
||||||
curl --request POST --header "PRIVATE-TOKEN:${GITLAB_API_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/statuses/${CI_COMMIT_SHA}?state=success&name=${UPLOAD_NAME}&target_url=${S3_URL}";
|
curl --request POST --header "PRIVATE-TOKEN:${GITLAB_API_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/statuses/${CI_COMMIT_SHA}?state=success&name=${UPLOAD_NAME}&target_url=${S3_URL}";
|
||||||
|
uploaded_files+=("$upload_filename");
|
||||||
done
|
done
|
||||||
|
- make_index_html "${uploaded_files[@]}" > output/index.html;
|
||||||
|
|
||||||
|
upload_build_preview:
|
||||||
|
stage: upload
|
||||||
|
needs: ["upload"]
|
||||||
|
dependencies: ["upload"]
|
||||||
|
image: ubuntu:focal
|
||||||
|
before_script:
|
||||||
|
- . .ci/upload.sh
|
||||||
|
resource_group: upload_build_preview
|
||||||
|
only:
|
||||||
|
variables:
|
||||||
|
- $CI_COMMIT_BRANCH == 'master'
|
||||||
|
script:
|
||||||
|
- prepare_to_run_scripts_and_s3_uploads
|
||||||
|
- preview_builds_dir=kasmvnc/preview-builds
|
||||||
|
- upload_to_s3 "output/index.html" "$preview_builds_dir/index.html" "$S3_BUCKET"
|
||||||
|
- curl --request POST --header "PRIVATE-TOKEN:${GITLAB_API_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/statuses/${CI_COMMIT_SHA}?state=success&name=index.html&target_url=${S3_URL}";
|
||||||
|
@ -148,9 +148,14 @@ endif()
|
|||||||
# Check for zlib
|
# Check for zlib
|
||||||
find_package(ZLIB REQUIRED)
|
find_package(ZLIB REQUIRED)
|
||||||
|
|
||||||
|
# Check for libpng
|
||||||
|
find_package(PNG REQUIRED)
|
||||||
|
|
||||||
# Check for libjpeg
|
# Check for libjpeg
|
||||||
find_package(JPEG REQUIRED)
|
find_package(JPEG REQUIRED)
|
||||||
|
|
||||||
|
# Staticly link libjpeg-turbo
|
||||||
|
set(JPEG_LIBRARIES "-Wl,-Bstatic -lturbojpeg -Wl,-Bdynamic")
|
||||||
# Warn if it doesn't seem to be the accelerated libjpeg that's found
|
# Warn if it doesn't seem to be the accelerated libjpeg that's found
|
||||||
set(CMAKE_REQUIRED_LIBRARIES ${JPEG_LIBRARIES})
|
set(CMAKE_REQUIRED_LIBRARIES ${JPEG_LIBRARIES})
|
||||||
set(CMAKE_REQUIRED_FLAGS -I${JPEG_INCLUDE_DIR})
|
set(CMAKE_REQUIRED_FLAGS -I${JPEG_INCLUDE_DIR})
|
||||||
|
@ -101,6 +101,9 @@ desktop:
|
|||||||
height: 768
|
height: 768
|
||||||
allow_resize: true
|
allow_resize: true
|
||||||
pixel_depth: 24
|
pixel_depth: 24
|
||||||
|
gpu:
|
||||||
|
hw3d: false
|
||||||
|
drinode: /dev/dri/renderD128
|
||||||
|
|
||||||
network:
|
network:
|
||||||
protocol: http
|
protocol: http
|
||||||
@ -228,6 +231,7 @@ command_line:
|
|||||||
|
|
||||||
# New Features!
|
# New Features!
|
||||||
|
|
||||||
|
- Faster jpeg compression (via statically linked libjpeg-turbo)
|
||||||
- Webp image compression for better bandwidth usage
|
- Webp image compression for better bandwidth usage
|
||||||
- Automatic mixing of webp and jpeg based on CPU availability on server
|
- Automatic mixing of webp and jpeg based on CPU availability on server
|
||||||
- Multi-threaded image encoding for smoother frame rate for servers with more cores
|
- Multi-threaded image encoding for smoother frame rate for servers with more cores
|
||||||
@ -255,6 +259,7 @@ command_line:
|
|||||||
- Cursor lock
|
- Cursor lock
|
||||||
- IME support for languages with extended characters
|
- IME support for languages with extended characters
|
||||||
- Better mobile support
|
- Better mobile support
|
||||||
|
- DRI3 GPU acceleration with open source drivers (AMDGPU,Intel,ATI,ARM)
|
||||||
|
|
||||||
Future Goals:
|
Future Goals:
|
||||||
|
|
||||||
|
@ -48,6 +48,18 @@ It will install the package inside a new container and run KasmVNC.
|
|||||||
|
|
||||||
Open browser and point to https://localhost:443/ or https://\<ip-address\>:443/
|
Open browser and point to https://localhost:443/ or https://\<ip-address\>:443/
|
||||||
|
|
||||||
|
## Debugging
|
||||||
|
|
||||||
|
To debug a test container, run `test-deb ubuntu focal -s` or `test-deb ubuntu
|
||||||
|
focal --shell`. It runs a shell instead of starting KasmVNC.
|
||||||
|
|
||||||
|
## Testing performance
|
||||||
|
|
||||||
|
To run a performance test, add `-p` option:
|
||||||
|
```
|
||||||
|
builder/test-deb ubuntu focal -p
|
||||||
|
```
|
||||||
|
|
||||||
# Package development
|
# Package development
|
||||||
|
|
||||||
## deb/rpm package building and testing
|
## deb/rpm package building and testing
|
||||||
|
17
builder/build-apk
Executable file
17
builder/build-apk
Executable file
@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
. builder/os_ver_cli.sh
|
||||||
|
|
||||||
|
cd "$(dirname "$0")/.."
|
||||||
|
|
||||||
|
docker build -t kasmvnc_apkbuilder_${os}:${os_codename} -f \
|
||||||
|
builder/dockerfile.${os}_${os_codename}.apk.build .
|
||||||
|
|
||||||
|
source_dir=$(echo $PWD)
|
||||||
|
L_UID=$(id -u)
|
||||||
|
L_GID=$(id -g)
|
||||||
|
docker run --rm -v "$source_dir":/src --user $L_UID:$L_GID \
|
||||||
|
kasmvnc_apkbuilder_${os}:${os_codename} /bin/bash -c \
|
||||||
|
'/src/builder/build-apk-inside-docker'
|
11
builder/build-apk-inside-docker
Executable file
11
builder/build-apk-inside-docker
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
os=alpine
|
||||||
|
os_codename=$(cat /etc/os-release | awk '/VERSION_ID/' | grep -o '[[:digit:]]' | tr -d '\n' | head -c 3)
|
||||||
|
|
||||||
|
mkdir -p /src/builder/build/${os}_${os_codename}
|
||||||
|
mv \
|
||||||
|
/src/builder/build/kasmvnc.${os}_${os_codename}.tar.gz \
|
||||||
|
/src/builder/build/${os}_${os_codename}/kasmvnc.${os}_${os_codename}_$(uname -m).tgz
|
@ -10,6 +10,8 @@ detect_package_format() {
|
|||||||
package_format=rpm
|
package_format=rpm
|
||||||
if ls builder/dockerfile*"$os"* | grep -q .deb.build; then
|
if ls builder/dockerfile*"$os"* | grep -q .deb.build; then
|
||||||
package_format=deb
|
package_format=deb
|
||||||
|
elif ls builder/dockerfile*"$os"* | grep -q .apk.build; then
|
||||||
|
package_format=apk
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ prepare_build_env() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
copy_spec_and_tar_with_binaries() {
|
copy_spec_and_tar_with_binaries() {
|
||||||
cp /tmp/kasmvncserver.spec ~/rpmbuild/SPECS/
|
cp /tmp/*.spec ~/rpmbuild/SPECS/
|
||||||
cp /src/builder/build/kasmvnc.${os}_${os_codename}.tar.gz \
|
cp /src/builder/build/kasmvnc.${os}_${os_codename}.tar.gz \
|
||||||
~/rpmbuild/SOURCES/
|
~/rpmbuild/SOURCES/
|
||||||
}
|
}
|
||||||
@ -30,6 +30,6 @@ fi
|
|||||||
os_dir="build/${os}_${os_codename}"
|
os_dir="build/${os}_${os_codename}"
|
||||||
|
|
||||||
prepare_build_env
|
prepare_build_env
|
||||||
rpmbuild -ba ~/rpmbuild/SPECS/kasmvncserver.spec
|
rpmbuild -ba ~/rpmbuild/SPECS/*.spec
|
||||||
copy_rpm_to_build_dir
|
copy_rpm_to_build_dir
|
||||||
rpmlint "$os_dir"/*.rpm || true
|
rpmlint "$os_dir"/*.rpm || true
|
||||||
|
@ -40,14 +40,14 @@ EOF
|
|||||||
#sudo apt-get install cmake git libjpeg-dev libgnutls-dev
|
#sudo apt-get install cmake git libjpeg-dev libgnutls-dev
|
||||||
|
|
||||||
# Gcc12 builds fail due to bug
|
# Gcc12 builds fail due to bug
|
||||||
fail_on_gcc_12
|
#fail_on_gcc_12
|
||||||
|
|
||||||
# Ubuntu applies a million patches, but here we use upstream to simplify matters
|
# Ubuntu applies a million patches, but here we use upstream to simplify matters
|
||||||
cd /tmp
|
cd /tmp
|
||||||
# default to the version of x in Ubuntu 18.04, otherwise caller will need to specify
|
# default to the version of x in Ubuntu 18.04, otherwise caller will need to specify
|
||||||
XORG_VER=${XORG_VER:-"1.19.6"}
|
XORG_VER=${XORG_VER:-"1.19.6"}
|
||||||
XORG_PATCH=$(echo "$XORG_VER" | grep -Po '^\d.\d+' | sed 's#\.##')
|
XORG_PATCH=$(echo "$XORG_VER" | grep -Po '^\d.\d+' | sed 's#\.##')
|
||||||
wget --no-check-certificate https://www.x.org/archive/individual/xserver/xorg-server-${XORG_VER}.tar.bz2
|
wget --no-check-certificate https://www.x.org/archive/individual/xserver/xorg-server-${XORG_VER}.tar.gz
|
||||||
|
|
||||||
#git clone https://kasmweb@bitbucket.org/kasmtech/kasmvnc.git
|
#git clone https://kasmweb@bitbucket.org/kasmtech/kasmvnc.git
|
||||||
#cd kasmvnc
|
#cd kasmvnc
|
||||||
@ -64,9 +64,10 @@ cmake -D CMAKE_BUILD_TYPE=RelWithDebInfo . -DBUILD_VIEWER:BOOL=OFF \
|
|||||||
-DENABLE_GNUTLS:BOOL=OFF
|
-DENABLE_GNUTLS:BOOL=OFF
|
||||||
make -j5
|
make -j5
|
||||||
|
|
||||||
tar -C unix/xserver -xf /tmp/xorg-server-${XORG_VER}.tar.bz2 --strip-components=1
|
tar -C unix/xserver -xf /tmp/xorg-server-${XORG_VER}.tar.gz --strip-components=1
|
||||||
|
|
||||||
cd unix/xserver
|
cd unix/xserver
|
||||||
|
# Apply patches
|
||||||
patch -Np1 -i ../xserver${XORG_PATCH}.patch
|
patch -Np1 -i ../xserver${XORG_PATCH}.patch
|
||||||
case "$XORG_VER" in
|
case "$XORG_VER" in
|
||||||
1.20.*)
|
1.20.*)
|
||||||
@ -85,22 +86,42 @@ autoreconf -i
|
|||||||
# everything after that is based on BUILDING.txt to remove unneeded
|
# everything after that is based on BUILDING.txt to remove unneeded
|
||||||
# components.
|
# components.
|
||||||
ensure_crashpad_can_fetch_line_number_by_address
|
ensure_crashpad_can_fetch_line_number_by_address
|
||||||
|
# Centos7 is too old for dri3
|
||||||
|
if [ ! "${KASMVNC_BUILD_OS}" == "centos" ]; then
|
||||||
|
CONFIG_OPTIONS="--enable-dri3"
|
||||||
|
fi
|
||||||
# remove gl check for opensuse
|
# remove gl check for opensuse
|
||||||
if [ "${KASMVNC_BUILD_OS}" == "opensuse" ]; then
|
if [ "${KASMVNC_BUILD_OS}" == "opensuse" ] || ([ "${KASMVNC_BUILD_OS}" == "oracle" ] && [ "${KASMVNC_BUILD_OS_CODENAME}" == 9 ]); then
|
||||||
sed -i 's/LIBGL="gl >= 7.1.0"/LIBGL="gl >= 1.1"/g' configure
|
sed -i 's/LIBGL="gl >= 7.1.0"/LIBGL="gl >= 1.1"/g' configure
|
||||||
fi
|
fi
|
||||||
./configure --prefix=/opt/kasmweb \
|
|
||||||
--with-xkb-path=/usr/share/X11/xkb \
|
# build X11
|
||||||
--with-xkb-output=/var/lib/xkb \
|
./configure \
|
||||||
--with-xkb-bin-directory=/usr/bin \
|
--disable-config-hal \
|
||||||
--with-default-font-path="/usr/share/fonts/X11/misc,/usr/share/fonts/X11/cyrillic,/usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1,/usr/share/fonts/X11/100dpi,/usr/share/fonts/X11/75dpi,built-ins" \
|
--disable-config-udev \
|
||||||
--with-sha1=libcrypto \
|
--disable-dmx \
|
||||||
--without-dtrace --disable-dri \
|
--disable-dri \
|
||||||
|
--disable-dri2 \
|
||||||
|
--disable-kdrive \
|
||||||
--disable-static \
|
--disable-static \
|
||||||
--disable-xinerama --disable-xvfb --disable-xnest --disable-xorg \
|
--disable-xephyr \
|
||||||
--disable-dmx --disable-xwin --disable-xephyr --disable-kdrive \
|
--disable-xinerama \
|
||||||
--disable-config-hal --disable-config-udev \
|
--disable-xnest \
|
||||||
--disable-dri2 --enable-glx --disable-xwayland --disable-dri3
|
--disable-xorg \
|
||||||
|
--disable-xvfb \
|
||||||
|
--disable-xwayland \
|
||||||
|
--disable-xwin \
|
||||||
|
--enable-glx \
|
||||||
|
--prefix=/opt/kasmweb \
|
||||||
|
--with-default-font-path="/usr/share/fonts/X11/misc,/usr/share/fonts/X11/cyrillic,/usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1,/usr/share/fonts/X11/100dpi,/usr/share/fonts/X11/75dpi,built-ins" \
|
||||||
|
--without-dtrace \
|
||||||
|
--with-sha1=libcrypto \
|
||||||
|
--with-xkb-bin-directory=/usr/bin \
|
||||||
|
--with-xkb-output=/var/lib/xkb \
|
||||||
|
--with-xkb-path=/usr/share/X11/xkb ${CONFIG_OPTIONS}
|
||||||
|
|
||||||
|
# remove array bounds errors for new versions of GCC
|
||||||
|
find . -name "Makefile" -exec sed -i 's/-Werror=array-bounds//g' {} \;
|
||||||
make -j5
|
make -j5
|
||||||
|
|
||||||
# modifications for the servertarball
|
# modifications for the servertarball
|
||||||
@ -118,6 +139,8 @@ if [ -d /usr/lib/x86_64-linux-gnu/dri ]; then
|
|||||||
ln -s /usr/lib/x86_64-linux-gnu/dri dri
|
ln -s /usr/lib/x86_64-linux-gnu/dri dri
|
||||||
elif [ -d /usr/lib/aarch64-linux-gnu/dri ]; then
|
elif [ -d /usr/lib/aarch64-linux-gnu/dri ]; then
|
||||||
ln -s /usr/lib/aarch64-linux-gnu/dri dri
|
ln -s /usr/lib/aarch64-linux-gnu/dri dri
|
||||||
|
elif [ -d /usr/lib/xorg/modules/dri ]; then
|
||||||
|
ln -s /usr/lib/xorg/modules/dri dri
|
||||||
else
|
else
|
||||||
ln -s /usr/lib64/dri dri
|
ln -s /usr/lib64/dri dri
|
||||||
fi
|
fi
|
||||||
|
@ -15,3 +15,4 @@ cd /build
|
|||||||
rm *.md
|
rm *.md
|
||||||
rm AUTHORS
|
rm AUTHORS
|
||||||
rm vnc.html
|
rm vnc.html
|
||||||
|
ln -s index.html vnc.html
|
||||||
|
@ -15,6 +15,11 @@ bump_deb() {
|
|||||||
builder/bump-package-version-deb "$new_version"
|
builder/bump-package-version-deb "$new_version"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bump_xvnc_binary() {
|
||||||
|
local cmd="s/#define XVNCVERSION.\+$/#define XVNCVERSION \"KasmVNC $new_version\"/"
|
||||||
|
sed -i -e "$cmd" unix/xserver/hw/vnc/xvnc.c
|
||||||
|
}
|
||||||
|
|
||||||
new_version="$1"
|
new_version="$1"
|
||||||
|
|
||||||
if [[ -z "$new_version" ]]; then
|
if [[ -z "$new_version" ]]; then
|
||||||
@ -25,5 +30,6 @@ fi
|
|||||||
cd "$(dirname "$0")/.."
|
cd "$(dirname "$0")/.."
|
||||||
|
|
||||||
update_version_to_meet_packaging_standards
|
update_version_to_meet_packaging_standards
|
||||||
|
bump_xvnc_binary
|
||||||
bump_rpm
|
bump_rpm
|
||||||
bump_deb
|
bump_deb
|
||||||
|
@ -3,9 +3,13 @@
|
|||||||
set -eo pipefail
|
set -eo pipefail
|
||||||
|
|
||||||
new_version="$1"
|
new_version="$1"
|
||||||
specs="centos/kasmvncserver.spec
|
spec_dirs=(centos oracle opensuse fedora)
|
||||||
oracle/kasmvncserver.spec
|
|
||||||
opensuse/kasmvncserver.spec"
|
spec_files() {
|
||||||
|
for d in "${spec_dirs[@]}"; do
|
||||||
|
ls "$d"/*.spec
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
bump_version() {
|
bump_version() {
|
||||||
sed -i "s/^Version:.\+/Version: $new_version/" "$1"
|
sed -i "s/^Version:.\+/Version: $new_version/" "$1"
|
||||||
@ -25,8 +29,7 @@ bump_changelog() {
|
|||||||
sed -i -e "s/%changelog/%changelog\n$new_changelog_entry/" "$1"
|
sed -i -e "s/%changelog/%changelog\n$new_changelog_entry/" "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
IFS=$'\n'
|
for spec_file in $(spec_files); do
|
||||||
for spec_file in $specs; do
|
|
||||||
bump_version $spec_file
|
bump_version $spec_file
|
||||||
bump_changelog $spec_file
|
bump_changelog $spec_file
|
||||||
done
|
done
|
||||||
|
7
builder/dockerfile.alpine_317.apk.build
Normal file
7
builder/dockerfile.alpine_317.apk.build
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
FROM alpine:3.17
|
||||||
|
|
||||||
|
RUN apk add shadow bash
|
||||||
|
|
||||||
|
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||||
|
|
||||||
|
USER docker
|
82
builder/dockerfile.alpine_317.build
Normal file
82
builder/dockerfile.alpine_317.build
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
FROM alpine:3.17
|
||||||
|
|
||||||
|
ENV KASMVNC_BUILD_OS alpine
|
||||||
|
ENV KASMVNC_BUILD_OS_CODENAME 317
|
||||||
|
ENV XORG_VER 1.20.14
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
echo "**** install build deps ****" && \
|
||||||
|
apk add \
|
||||||
|
alpine-release \
|
||||||
|
alpine-sdk \
|
||||||
|
autoconf \
|
||||||
|
automake \
|
||||||
|
bash \
|
||||||
|
ca-certificates \
|
||||||
|
cmake \
|
||||||
|
coreutils \
|
||||||
|
curl \
|
||||||
|
eudev-dev \
|
||||||
|
font-cursor-misc \
|
||||||
|
font-misc-misc \
|
||||||
|
font-util-dev \
|
||||||
|
git \
|
||||||
|
grep \
|
||||||
|
jq \
|
||||||
|
libdrm-dev \
|
||||||
|
libepoxy-dev \
|
||||||
|
libjpeg-turbo-dev \
|
||||||
|
libjpeg-turbo-static \
|
||||||
|
libpciaccess-dev \
|
||||||
|
libtool \
|
||||||
|
libwebp-dev \
|
||||||
|
libx11-dev \
|
||||||
|
libxau-dev \
|
||||||
|
libxcb-dev \
|
||||||
|
libxcursor-dev \
|
||||||
|
libxcvt-dev \
|
||||||
|
libxdmcp-dev \
|
||||||
|
libxext-dev \
|
||||||
|
libxfont2-dev \
|
||||||
|
libxkbfile-dev \
|
||||||
|
libxrandr-dev \
|
||||||
|
libxshmfence-dev \
|
||||||
|
libxtst-dev \
|
||||||
|
mesa-dev \
|
||||||
|
mesa-dri-gallium \
|
||||||
|
meson \
|
||||||
|
nettle-dev \
|
||||||
|
openssl-dev \
|
||||||
|
pixman-dev \
|
||||||
|
procps \
|
||||||
|
shadow \
|
||||||
|
tar \
|
||||||
|
tzdata \
|
||||||
|
wayland-dev \
|
||||||
|
wayland-protocols \
|
||||||
|
xcb-util-dev \
|
||||||
|
xcb-util-image-dev \
|
||||||
|
xcb-util-keysyms-dev \
|
||||||
|
xcb-util-renderutil-dev \
|
||||||
|
xcb-util-wm-dev \
|
||||||
|
xinit \
|
||||||
|
xkbcomp \
|
||||||
|
xkbcomp-dev \
|
||||||
|
xkeyboard-config \
|
||||||
|
xorgproto \
|
||||||
|
xorg-server-common \
|
||||||
|
xorg-server-dev \
|
||||||
|
xtrans
|
||||||
|
|
||||||
|
|
||||||
|
ENV SCRIPTS_DIR=/tmp/scripts
|
||||||
|
COPY builder/scripts $SCRIPTS_DIR
|
||||||
|
RUN $SCRIPTS_DIR/build-webp
|
||||||
|
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||||
|
|
||||||
|
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||||
|
|
||||||
|
COPY --chown=docker:docker . /src/
|
||||||
|
|
||||||
|
USER docker
|
||||||
|
ENTRYPOINT ["/src/builder/build.sh"]
|
7
builder/dockerfile.alpine_318.apk.build
Normal file
7
builder/dockerfile.alpine_318.apk.build
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
FROM alpine:3.18
|
||||||
|
|
||||||
|
RUN apk add shadow bash
|
||||||
|
|
||||||
|
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||||
|
|
||||||
|
USER docker
|
82
builder/dockerfile.alpine_318.build
Normal file
82
builder/dockerfile.alpine_318.build
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
FROM alpine:3.18
|
||||||
|
|
||||||
|
ENV KASMVNC_BUILD_OS alpine
|
||||||
|
ENV KASMVNC_BUILD_OS_CODENAME 318
|
||||||
|
ENV XORG_VER 1.20.14
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
echo "**** install build deps ****" && \
|
||||||
|
apk add \
|
||||||
|
alpine-release \
|
||||||
|
alpine-sdk \
|
||||||
|
autoconf \
|
||||||
|
automake \
|
||||||
|
bash \
|
||||||
|
ca-certificates \
|
||||||
|
cmake \
|
||||||
|
coreutils \
|
||||||
|
curl \
|
||||||
|
eudev-dev \
|
||||||
|
font-cursor-misc \
|
||||||
|
font-misc-misc \
|
||||||
|
font-util-dev \
|
||||||
|
git \
|
||||||
|
grep \
|
||||||
|
jq \
|
||||||
|
libdrm-dev \
|
||||||
|
libepoxy-dev \
|
||||||
|
libjpeg-turbo-dev \
|
||||||
|
libjpeg-turbo-static \
|
||||||
|
libpciaccess-dev \
|
||||||
|
libtool \
|
||||||
|
libwebp-dev \
|
||||||
|
libx11-dev \
|
||||||
|
libxau-dev \
|
||||||
|
libxcb-dev \
|
||||||
|
libxcursor-dev \
|
||||||
|
libxcvt-dev \
|
||||||
|
libxdmcp-dev \
|
||||||
|
libxext-dev \
|
||||||
|
libxfont2-dev \
|
||||||
|
libxkbfile-dev \
|
||||||
|
libxrandr-dev \
|
||||||
|
libxshmfence-dev \
|
||||||
|
libxtst-dev \
|
||||||
|
mesa-dev \
|
||||||
|
mesa-dri-gallium \
|
||||||
|
meson \
|
||||||
|
nettle-dev \
|
||||||
|
openssl-dev \
|
||||||
|
pixman-dev \
|
||||||
|
procps \
|
||||||
|
shadow \
|
||||||
|
tar \
|
||||||
|
tzdata \
|
||||||
|
wayland-dev \
|
||||||
|
wayland-protocols \
|
||||||
|
xcb-util-dev \
|
||||||
|
xcb-util-image-dev \
|
||||||
|
xcb-util-keysyms-dev \
|
||||||
|
xcb-util-renderutil-dev \
|
||||||
|
xcb-util-wm-dev \
|
||||||
|
xinit \
|
||||||
|
xkbcomp \
|
||||||
|
xkbcomp-dev \
|
||||||
|
xkeyboard-config \
|
||||||
|
xorgproto \
|
||||||
|
xorg-server-common \
|
||||||
|
xorg-server-dev \
|
||||||
|
xtrans
|
||||||
|
|
||||||
|
|
||||||
|
ENV SCRIPTS_DIR=/tmp/scripts
|
||||||
|
COPY builder/scripts $SCRIPTS_DIR
|
||||||
|
RUN $SCRIPTS_DIR/build-webp
|
||||||
|
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||||
|
|
||||||
|
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||||
|
|
||||||
|
COPY --chown=docker:docker . /src/
|
||||||
|
|
||||||
|
USER docker
|
||||||
|
ENTRYPOINT ["/src/builder/build.sh"]
|
@ -5,11 +5,11 @@ ENV KASMVNC_BUILD_OS_CODENAME core
|
|||||||
|
|
||||||
RUN yum install -y ca-certificates
|
RUN yum install -y ca-certificates
|
||||||
RUN yum install -y build-dep xorg-server libxfont-dev sudo
|
RUN yum install -y build-dep xorg-server libxfont-dev sudo
|
||||||
RUN yum install -y gcc cmake git libjpeg-dev libgnutls28-dev vim wget tightvncserver
|
RUN yum install -y gcc cmake git libgnutls28-dev vim wget tightvncserver
|
||||||
RUN yum install -y libjpeg-dev libpng-dev libtiff-dev libgif-dev libavcodec-dev openssl-devel
|
RUN yum install -y libpng-dev libtiff-dev libgif-dev libavcodec-dev openssl-devel
|
||||||
RUN yum install -y make
|
RUN yum install -y make
|
||||||
RUN yum group install -y "Development Tools"
|
RUN yum group install -y "Development Tools"
|
||||||
RUN yum install -y xorg-x11-server-devel zlib-devel libjpeg-turbo-devel
|
RUN yum install -y xorg-x11-server-devel zlib-devel
|
||||||
RUN yum install -y libxkbfile-devel libXfont2-devel xorg-x11-font-utils \
|
RUN yum install -y libxkbfile-devel libXfont2-devel xorg-x11-font-utils \
|
||||||
xorg-x11-xtrans-devel xorg-x11-xkb-utils-devel libXrandr-devel pam-devel \
|
xorg-x11-xtrans-devel xorg-x11-xkb-utils-devel libXrandr-devel pam-devel \
|
||||||
gnutls-devel libX11-devel libXtst-devel libXcursor-devel
|
gnutls-devel libX11-devel libXtst-devel libXcursor-devel
|
||||||
@ -23,6 +23,10 @@ RUN cd /tmp/libwebp-1.0.2 && \
|
|||||||
./configure --enable-static --disable-shared && \
|
./configure --enable-static --disable-shared && \
|
||||||
make && make install
|
make && make install
|
||||||
|
|
||||||
|
ENV SCRIPTS_DIR=/tmp/scripts
|
||||||
|
COPY builder/scripts $SCRIPTS_DIR
|
||||||
|
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||||
|
|
||||||
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||||
|
|
||||||
COPY --chown=docker:docker . /src/
|
COPY --chown=docker:docker . /src/
|
||||||
|
38
builder/dockerfile.debian_bookworm.build
Normal file
38
builder/dockerfile.debian_bookworm.build
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
FROM debian:bookworm-slim
|
||||||
|
|
||||||
|
ENV KASMVNC_BUILD_OS debian
|
||||||
|
ENV KASMVNC_BUILD_OS_CODENAME bookworm
|
||||||
|
ENV XORG_VER 1.20.10
|
||||||
|
ENV DEBIAN_FRONTEND noninteractive
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
echo "**** add all sources ****" && \
|
||||||
|
echo "deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware" > /etc/apt/sources.list && \
|
||||||
|
echo "deb-src http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
|
||||||
|
echo "deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
|
||||||
|
echo "deb-src http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
|
||||||
|
echo "deb http://deb.debian.org/debian bookworm-backports main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
|
||||||
|
echo "deb-src http://deb.debian.org/debian bookworm-backports main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
|
||||||
|
echo "deb http://security.debian.org/debian-security/ bookworm-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
|
||||||
|
echo "deb-src http://security.debian.org/debian-security/ bookworm-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
|
||||||
|
rm -f /etc/apt/sources.list.d/debian.sources
|
||||||
|
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get -y install sudo
|
||||||
|
|
||||||
|
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
|
||||||
|
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
|
||||||
|
RUN apt-get update && apt-get -y install cmake git libgnutls28-dev vim wget tightvncserver curl
|
||||||
|
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
||||||
|
|
||||||
|
ENV SCRIPTS_DIR=/tmp/scripts
|
||||||
|
COPY builder/scripts $SCRIPTS_DIR
|
||||||
|
RUN $SCRIPTS_DIR/build-webp
|
||||||
|
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||||
|
|
||||||
|
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
|
||||||
|
|
||||||
|
COPY --chown=docker:docker . /src/
|
||||||
|
|
||||||
|
USER docker
|
||||||
|
ENTRYPOINT ["/src/builder/build.sh"]
|
@ -1,18 +1,14 @@
|
|||||||
FROM ubuntu:bionic
|
FROM debian:bookworm
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND noninteractive
|
||||||
|
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get -y install vim build-essential devscripts equivs
|
apt-get -y install vim build-essential devscripts equivs
|
||||||
|
|
||||||
ARG KASMVNC_PACKAGE_DIR
|
|
||||||
COPY $KASMVNC_PACKAGE_DIR/libjpeg-turbo*deb /tmp/
|
|
||||||
RUN apt-get install /tmp/libjpeg-turbo*deb
|
|
||||||
|
|
||||||
# Install build-deps for the package.
|
# Install build-deps for the package.
|
||||||
COPY ./debian/control /tmp
|
COPY ./debian/control /tmp
|
||||||
RUN apt-get update && echo YYY | mk-build-deps --install --remove /tmp/control
|
RUN apt-get update && echo YYY | mk-build-deps --install --remove /tmp/control
|
||||||
|
|
||||||
ENV LD_LIBRARY_PATH="/opt/libjpeg-turbo/lib64/:$LD_LIBRARY_PATH"
|
|
||||||
|
|
||||||
ARG L_UID
|
ARG L_UID
|
||||||
RUN if [ "$L_UID" -eq 0 ]; then \
|
RUN if [ "$L_UID" -eq 0 ]; then \
|
||||||
useradd -m docker; \
|
useradd -m docker; \
|
@ -1,4 +1,4 @@
|
|||||||
FROM ubuntu:bionic
|
FROM debian:bookworm-slim
|
||||||
|
|
||||||
ENV DISPLAY=:1 \
|
ENV DISPLAY=:1 \
|
||||||
VNC_PORT=8443 \
|
VNC_PORT=8443 \
|
||||||
@ -16,12 +16,12 @@ ENV DISPLAY=:1 \
|
|||||||
VNC_PW=vncpassword \
|
VNC_PW=vncpassword \
|
||||||
VNC_USER=user \
|
VNC_USER=user \
|
||||||
VNC_VIEW_ONLY_PW=vncviewonlypassword \
|
VNC_VIEW_ONLY_PW=vncviewonlypassword \
|
||||||
LD_LIBRARY_PATH=/opt/libjpeg-turbo/lib64/:/usr/local/lib/ \
|
LD_LIBRARY_PATH=/usr/local/lib/ \
|
||||||
OMP_WAIT_POLICY=PASSIVE \
|
OMP_WAIT_POLICY=PASSIVE \
|
||||||
SHELL=/bin/bash \
|
SHELL=/bin/bash \
|
||||||
SINGLE_APPLICATION=0 \
|
SINGLE_APPLICATION=0 \
|
||||||
KASMVNC_BUILD_OS=ubuntu \
|
KASMVNC_BUILD_OS=debian \
|
||||||
KASMVNC_BUILD_OS_CODENAME=bionic
|
KASMVNC_BUILD_OS_CODENAME=buster
|
||||||
|
|
||||||
EXPOSE $VNC_PORT
|
EXPOSE $VNC_PORT
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ WORKDIR $HOME
|
|||||||
|
|
||||||
### REQUIRED STUFF ###
|
### REQUIRED STUFF ###
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext wget
|
RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal dbus-x11 xterm libnss-wrapper gettext wget
|
||||||
RUN apt-get purge -y pm-utils xscreensaver*
|
RUN apt-get purge -y pm-utils xscreensaver*
|
||||||
RUN apt-get update && apt-get install -y vim less
|
RUN apt-get update && apt-get install -y vim less
|
||||||
RUN apt-get update && apt-get -y install lsb-release
|
RUN apt-get update && apt-get -y install lsb-release
|
||||||
@ -40,16 +40,13 @@ RUN mkdir -p $STARTUPDIR
|
|||||||
COPY builder/startup/ $STARTUPDIR
|
COPY builder/startup/ $STARTUPDIR
|
||||||
|
|
||||||
### START CUSTOM STUFF ####
|
### START CUSTOM STUFF ####
|
||||||
|
|
||||||
COPY ./builder/scripts/ /tmp/scripts/
|
COPY ./builder/scripts/ /tmp/scripts/
|
||||||
COPY ./debian/changelog /tmp
|
COPY ./debian/changelog /tmp
|
||||||
|
|
||||||
ARG KASMVNC_PACKAGE_DIR
|
ARG KASMVNC_PACKAGE_DIR
|
||||||
COPY $KASMVNC_PACKAGE_DIR/libjpeg-turbo_*.deb /tmp/
|
COPY $KASMVNC_PACKAGE_DIR/kasmvncserver_*.deb /tmp/
|
||||||
RUN apt-get install /tmp/libjpeg-turbo*deb
|
RUN /tmp/scripts/install_kasmvncserver_package
|
||||||
|
|
||||||
ARG BUILD_DEBIAN_REVISION
|
|
||||||
COPY $KASMVNC_PACKAGE_DIR/kasmvncserver_*$BUILD_DEBIAN_REVISION*.deb /tmp/
|
|
||||||
RUN /tmp/scripts/install_kasmvncserver_package "$BUILD_DEBIAN_REVISION"
|
|
||||||
|
|
||||||
### END CUSTOM STUFF ###
|
### END CUSTOM STUFF ###
|
||||||
|
|
@ -12,15 +12,13 @@ RUN apt-get update && \
|
|||||||
|
|
||||||
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
|
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
|
||||||
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
|
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
|
||||||
RUN apt-get update && apt-get -y install cmake git libjpeg-dev libgnutls28-dev vim wget tightvncserver
|
RUN apt-get update && apt-get -y install cmake git libgnutls28-dev vim wget tightvncserver curl
|
||||||
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
||||||
|
|
||||||
# Additions for webp
|
ENV SCRIPTS_DIR=/tmp/scripts
|
||||||
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz
|
COPY builder/scripts $SCRIPTS_DIR
|
||||||
RUN cd /tmp && tar -xzf /tmp/libwebp-*
|
RUN $SCRIPTS_DIR/build-webp
|
||||||
RUN cd /tmp/libwebp-1.0.2 && \
|
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||||
./configure --enable-static --disable-shared && \
|
|
||||||
make && make install
|
|
||||||
|
|
||||||
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
|
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
|
||||||
|
|
||||||
|
@ -12,15 +12,13 @@ RUN apt-get update && \
|
|||||||
|
|
||||||
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
|
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
|
||||||
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
|
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
|
||||||
RUN apt-get update && apt-get -y install cmake git libjpeg-dev libgnutls28-dev vim wget tightvncserver
|
RUN apt-get update && apt-get -y install cmake git libgnutls28-dev vim wget tightvncserver curl
|
||||||
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
||||||
|
|
||||||
# Additions for webp
|
ENV SCRIPTS_DIR=/tmp/scripts
|
||||||
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz
|
COPY builder/scripts $SCRIPTS_DIR
|
||||||
RUN cd /tmp && tar -xzf /tmp/libwebp-*
|
RUN $SCRIPTS_DIR/build-webp
|
||||||
RUN cd /tmp/libwebp-1.0.2 && \
|
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||||
./configure --enable-static --disable-shared && \
|
|
||||||
make && make install
|
|
||||||
|
|
||||||
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
|
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
|
||||||
|
|
||||||
|
@ -34,14 +34,6 @@ RUN apt-get purge -y pm-utils xscreensaver*
|
|||||||
RUN apt-get update && apt-get install -y vim less
|
RUN apt-get update && apt-get install -y vim less
|
||||||
RUN apt-get update && apt-get -y install lsb-release
|
RUN apt-get update && apt-get -y install lsb-release
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y task-cinnamon-desktop
|
|
||||||
RUN apt-get update && apt-get install -y task-gnome-desktop
|
|
||||||
RUN mkdir -p /usr/share/man/man1
|
|
||||||
RUN apt-get update && apt-get install -y apt-utils openjdk-11-jre
|
|
||||||
RUN apt-get update && apt-get install -y task-lxde-desktop
|
|
||||||
RUN apt-get update && apt-get install -y task-mate-desktop
|
|
||||||
RUN apt-get update && apt-get install -y task-kde-desktop
|
|
||||||
|
|
||||||
RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc
|
RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc
|
||||||
|
|
||||||
RUN mkdir -p $STARTUPDIR
|
RUN mkdir -p $STARTUPDIR
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM fedora:33
|
FROM fedora:38
|
||||||
|
|
||||||
ENV STARTUPDIR=/dockerstartup
|
ENV STARTUPDIR=/dockerstartup
|
||||||
|
|
86
builder/dockerfile.fedora_thirtyeight.build
Normal file
86
builder/dockerfile.fedora_thirtyeight.build
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
FROM fedora:38
|
||||||
|
|
||||||
|
ENV KASMVNC_BUILD_OS fedora
|
||||||
|
ENV KASMVNC_BUILD_OS_CODENAME thirtyeight
|
||||||
|
ENV XORG_VER 1.20.14
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
echo "**** install build deps ****" && \
|
||||||
|
dnf group install -y \
|
||||||
|
"C Development Tools and Libraries" \
|
||||||
|
"Development Tools" && \
|
||||||
|
dnf install -y \
|
||||||
|
autoconf \
|
||||||
|
automake \
|
||||||
|
bison \
|
||||||
|
byacc \
|
||||||
|
bzip2 \
|
||||||
|
cmake \
|
||||||
|
diffutils \
|
||||||
|
doxygen \
|
||||||
|
file \
|
||||||
|
flex \
|
||||||
|
fop \
|
||||||
|
gcc \
|
||||||
|
gcc-c++ \
|
||||||
|
git \
|
||||||
|
glibc-devel \
|
||||||
|
libdrm-devel \
|
||||||
|
libepoxy-devel \
|
||||||
|
libmd-devel \
|
||||||
|
libpciaccess-devel \
|
||||||
|
libtool \
|
||||||
|
libwebp-devel \
|
||||||
|
libX11-devel \
|
||||||
|
libXau-devel \
|
||||||
|
libxcb-devel \
|
||||||
|
libXcursor-devel \
|
||||||
|
libxcvt-devel \
|
||||||
|
libXdmcp-devel \
|
||||||
|
libXext-devel \
|
||||||
|
libXfont2-devel \
|
||||||
|
libxkbfile-devel \
|
||||||
|
libXrandr-devel \
|
||||||
|
libxshmfence-devel \
|
||||||
|
libXtst-devel \
|
||||||
|
mesa-libEGL-devel \
|
||||||
|
mesa-libgbm-devel \
|
||||||
|
mesa-libGL-devel \
|
||||||
|
meson \
|
||||||
|
mingw64-binutils \
|
||||||
|
mt-st \
|
||||||
|
nettle-devel \
|
||||||
|
openssl-devel \
|
||||||
|
patch \
|
||||||
|
pixman-devel \
|
||||||
|
wayland-devel \
|
||||||
|
wget \
|
||||||
|
which \
|
||||||
|
xcb-util-devel \
|
||||||
|
xcb-util-image-devel \
|
||||||
|
xcb-util-keysyms-devel \
|
||||||
|
xcb-util-renderutil-devel \
|
||||||
|
xcb-util-wm-devel \
|
||||||
|
xinit \
|
||||||
|
xkbcomp \
|
||||||
|
xkbcomp-devel \
|
||||||
|
xkeyboard-config \
|
||||||
|
xmlto \
|
||||||
|
xorg-x11-font-utils \
|
||||||
|
xorg-x11-proto-devel \
|
||||||
|
xorg-x11-server-common \
|
||||||
|
xorg-x11-server-devel \
|
||||||
|
xorg-x11-xtrans-devel \
|
||||||
|
xsltproc
|
||||||
|
|
||||||
|
ENV SCRIPTS_DIR=/tmp/scripts
|
||||||
|
COPY builder/scripts $SCRIPTS_DIR
|
||||||
|
RUN $SCRIPTS_DIR/build-webp
|
||||||
|
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||||
|
|
||||||
|
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||||
|
|
||||||
|
COPY --chown=docker:docker . /src/
|
||||||
|
|
||||||
|
USER docker
|
||||||
|
ENTRYPOINT ["/src/builder/build.sh"]
|
@ -1,11 +1,11 @@
|
|||||||
FROM fedora:33
|
FROM fedora:38
|
||||||
|
|
||||||
RUN dnf install -y fedora-packager fedora-review
|
RUN dnf install -y fedora-packager fedora-review
|
||||||
RUN dnf install -y tree vim less
|
RUN dnf install -y tree vim less
|
||||||
RUN dnf install -y redhat-lsb-core
|
RUN dnf install -y redhat-lsb-core
|
||||||
RUN dnf install -y dnf-plugins-core
|
RUN dnf install -y dnf-plugins-core
|
||||||
|
|
||||||
COPY centos/*.spec /tmp
|
COPY fedora/*.spec /tmp
|
||||||
RUN dnf builddep -y /tmp/*.spec
|
RUN dnf builddep -y /tmp/*.spec
|
||||||
|
|
||||||
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
@ -1,4 +1,4 @@
|
|||||||
FROM fedora:33
|
FROM fedora:38
|
||||||
|
|
||||||
ENV DISPLAY=:1 \
|
ENV DISPLAY=:1 \
|
||||||
VNC_PORT=8443 \
|
VNC_PORT=8443 \
|
||||||
@ -31,8 +31,7 @@ WORKDIR $HOME
|
|||||||
|
|
||||||
RUN dnf install -y openssl xterm gettext wget
|
RUN dnf install -y openssl xterm gettext wget
|
||||||
RUN dnf install -y nss_wrapper
|
RUN dnf install -y nss_wrapper
|
||||||
RUN dnf install -y xorg-x11-xauth xorg-x11-xkb-utils \
|
RUN dnf install -y xorg-x11-xauth xkeyboard-config
|
||||||
xkeyboard-config xorg-x11-server-utils
|
|
||||||
# xorg-x11-server-Xorg
|
# xorg-x11-server-Xorg
|
||||||
# RUN dnf install -y @xfce-desktop-environment
|
# RUN dnf install -y @xfce-desktop-environment
|
||||||
RUN dnf erase -y pm-utils xscreensaver*
|
RUN dnf erase -y pm-utils xscreensaver*
|
||||||
@ -47,7 +46,7 @@ COPY builder/startup/ $STARTUPDIR
|
|||||||
|
|
||||||
### START CUSTOM STUFF ####
|
### START CUSTOM STUFF ####
|
||||||
COPY ./builder/scripts/ /tmp/scripts/
|
COPY ./builder/scripts/ /tmp/scripts/
|
||||||
COPY ./centos/kasmvncserver.spec /tmp
|
COPY ./fedora/kasmvncserver.spec /tmp
|
||||||
|
|
||||||
ARG KASMVNC_PACKAGE_DIR
|
ARG KASMVNC_PACKAGE_DIR
|
||||||
COPY $KASMVNC_PACKAGE_DIR/*.rpm /tmp/
|
COPY $KASMVNC_PACKAGE_DIR/*.rpm /tmp/
|
19
builder/dockerfile.fedora_thirtyseven.barebones.rpm.test
Normal file
19
builder/dockerfile.fedora_thirtyseven.barebones.rpm.test
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
FROM fedora:37
|
||||||
|
|
||||||
|
ENV STARTUPDIR=/dockerstartup
|
||||||
|
|
||||||
|
RUN dnf install -y xterm
|
||||||
|
RUN dnf install -y vim less
|
||||||
|
RUN yum install -y redhat-lsb-core
|
||||||
|
|
||||||
|
ARG KASMVNC_PACKAGE_DIR
|
||||||
|
COPY $KASMVNC_PACKAGE_DIR/*.rpm /tmp/
|
||||||
|
RUN dnf localinstall -y /tmp/*.rpm
|
||||||
|
|
||||||
|
RUN mkdir -p $STARTUPDIR
|
||||||
|
COPY startup/vnc_startup_barebones.sh $STARTUPDIR
|
||||||
|
|
||||||
|
RUN useradd -m foo
|
||||||
|
USER foo:kasmvnc-cert
|
||||||
|
|
||||||
|
ENTRYPOINT "/$STARTUPDIR/vnc_startup_barebones.sh"
|
86
builder/dockerfile.fedora_thirtyseven.build
Normal file
86
builder/dockerfile.fedora_thirtyseven.build
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
FROM fedora:37
|
||||||
|
|
||||||
|
ENV KASMVNC_BUILD_OS fedora
|
||||||
|
ENV KASMVNC_BUILD_OS_CODENAME thirtyseven
|
||||||
|
ENV XORG_VER 1.20.14
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
echo "**** install build deps ****" && \
|
||||||
|
dnf group install -y \
|
||||||
|
"C Development Tools and Libraries" \
|
||||||
|
"Development Tools" && \
|
||||||
|
dnf install -y \
|
||||||
|
autoconf \
|
||||||
|
automake \
|
||||||
|
bison \
|
||||||
|
byacc \
|
||||||
|
bzip2 \
|
||||||
|
cmake \
|
||||||
|
diffutils \
|
||||||
|
doxygen \
|
||||||
|
file \
|
||||||
|
flex \
|
||||||
|
fop \
|
||||||
|
gcc \
|
||||||
|
gcc-c++ \
|
||||||
|
git \
|
||||||
|
glibc-devel \
|
||||||
|
libdrm-devel \
|
||||||
|
libepoxy-devel \
|
||||||
|
libmd-devel \
|
||||||
|
libpciaccess-devel \
|
||||||
|
libtool \
|
||||||
|
libwebp-devel \
|
||||||
|
libX11-devel \
|
||||||
|
libXau-devel \
|
||||||
|
libxcb-devel \
|
||||||
|
libXcursor-devel \
|
||||||
|
libxcvt-devel \
|
||||||
|
libXdmcp-devel \
|
||||||
|
libXext-devel \
|
||||||
|
libXfont2-devel \
|
||||||
|
libxkbfile-devel \
|
||||||
|
libXrandr-devel \
|
||||||
|
libxshmfence-devel \
|
||||||
|
libXtst-devel \
|
||||||
|
mesa-libEGL-devel \
|
||||||
|
mesa-libgbm-devel \
|
||||||
|
mesa-libGL-devel \
|
||||||
|
meson \
|
||||||
|
mingw64-binutils \
|
||||||
|
mt-st \
|
||||||
|
nettle-devel \
|
||||||
|
openssl-devel \
|
||||||
|
patch \
|
||||||
|
pixman-devel \
|
||||||
|
wayland-devel \
|
||||||
|
wget \
|
||||||
|
which \
|
||||||
|
xcb-util-devel \
|
||||||
|
xcb-util-image-devel \
|
||||||
|
xcb-util-keysyms-devel \
|
||||||
|
xcb-util-renderutil-devel \
|
||||||
|
xcb-util-wm-devel \
|
||||||
|
xinit \
|
||||||
|
xkbcomp \
|
||||||
|
xkbcomp-devel \
|
||||||
|
xkeyboard-config \
|
||||||
|
xmlto \
|
||||||
|
xorg-x11-font-utils \
|
||||||
|
xorg-x11-proto-devel \
|
||||||
|
xorg-x11-server-common \
|
||||||
|
xorg-x11-server-devel \
|
||||||
|
xorg-x11-xtrans-devel \
|
||||||
|
xsltproc
|
||||||
|
|
||||||
|
ENV SCRIPTS_DIR=/tmp/scripts
|
||||||
|
COPY builder/scripts $SCRIPTS_DIR
|
||||||
|
RUN $SCRIPTS_DIR/build-webp
|
||||||
|
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||||
|
|
||||||
|
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||||
|
|
||||||
|
COPY --chown=docker:docker . /src/
|
||||||
|
|
||||||
|
USER docker
|
||||||
|
ENTRYPOINT ["/src/builder/build.sh"]
|
13
builder/dockerfile.fedora_thirtyseven.rpm.build
Normal file
13
builder/dockerfile.fedora_thirtyseven.rpm.build
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
FROM fedora:37
|
||||||
|
|
||||||
|
RUN dnf install -y fedora-packager fedora-review
|
||||||
|
RUN dnf install -y tree vim less
|
||||||
|
RUN dnf install -y redhat-lsb-core
|
||||||
|
RUN dnf install -y dnf-plugins-core
|
||||||
|
|
||||||
|
COPY fedora/*.spec /tmp
|
||||||
|
RUN dnf builddep -y /tmp/*.spec
|
||||||
|
|
||||||
|
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||||
|
|
||||||
|
USER docker
|
62
builder/dockerfile.fedora_thirtyseven.rpm.test
Normal file
62
builder/dockerfile.fedora_thirtyseven.rpm.test
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
FROM fedora:37
|
||||||
|
|
||||||
|
ENV DISPLAY=:1 \
|
||||||
|
VNC_PORT=8443 \
|
||||||
|
VNC_RESOLUTION=1280x720 \
|
||||||
|
MAX_FRAME_RATE=24 \
|
||||||
|
VNCOPTIONS="-PreferBandwidth -DynamicQualityMin=4 -DynamicQualityMax=7" \
|
||||||
|
HOME=/home/user \
|
||||||
|
TERM=xterm \
|
||||||
|
STARTUPDIR=/dockerstartup \
|
||||||
|
INST_SCRIPTS=/dockerstartup/install \
|
||||||
|
KASM_RX_HOME=/dockerstartup/kasmrx \
|
||||||
|
DEBIAN_FRONTEND=noninteractive \
|
||||||
|
VNC_COL_DEPTH=24 \
|
||||||
|
VNC_RESOLUTION=1280x1024 \
|
||||||
|
VNC_PW=vncpassword \
|
||||||
|
VNC_USER=user \
|
||||||
|
VNC_VIEW_ONLY_PW=vncviewonlypassword \
|
||||||
|
LD_LIBRARY_PATH=/usr/local/lib/ \
|
||||||
|
OMP_WAIT_POLICY=PASSIVE \
|
||||||
|
SHELL=/bin/bash \
|
||||||
|
SINGLE_APPLICATION=0 \
|
||||||
|
KASMVNC_BUILD_OS=fedora \
|
||||||
|
KASMVNC_BUILD_OS_CODENAME=thirtythree
|
||||||
|
|
||||||
|
EXPOSE $VNC_PORT
|
||||||
|
|
||||||
|
WORKDIR $HOME
|
||||||
|
|
||||||
|
### REQUIRED STUFF ###
|
||||||
|
|
||||||
|
RUN dnf install -y openssl xterm gettext wget
|
||||||
|
RUN dnf install -y nss_wrapper
|
||||||
|
RUN dnf install -y xorg-x11-xauth xkeyboard-config
|
||||||
|
# xorg-x11-server-Xorg
|
||||||
|
# RUN dnf install -y @xfce-desktop-environment
|
||||||
|
RUN dnf erase -y pm-utils xscreensaver*
|
||||||
|
RUN dnf install -y redhat-lsb-core
|
||||||
|
RUN dnf install -y vim less
|
||||||
|
RUN dnf install -y @xfce-desktop-environment
|
||||||
|
|
||||||
|
RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc
|
||||||
|
|
||||||
|
RUN mkdir -p $STARTUPDIR
|
||||||
|
COPY builder/startup/ $STARTUPDIR
|
||||||
|
|
||||||
|
### START CUSTOM STUFF ####
|
||||||
|
COPY ./builder/scripts/ /tmp/scripts/
|
||||||
|
COPY ./fedora/kasmvncserver.spec /tmp
|
||||||
|
|
||||||
|
ARG KASMVNC_PACKAGE_DIR
|
||||||
|
COPY $KASMVNC_PACKAGE_DIR/*.rpm /tmp/
|
||||||
|
# RUN dnf remove -y tigervnc-server-minimal
|
||||||
|
RUN /tmp/scripts/install_kasmvncserver_package
|
||||||
|
|
||||||
|
### END CUSTOM STUFF ###
|
||||||
|
|
||||||
|
RUN chown -R 1000:0 $HOME
|
||||||
|
USER 1000:kasmvnc-cert
|
||||||
|
WORKDIR $HOME
|
||||||
|
|
||||||
|
ENTRYPOINT [ "/dockerstartup/vnc_startup.sh" ]
|
@ -1,38 +0,0 @@
|
|||||||
FROM fedora:33
|
|
||||||
|
|
||||||
ENV KASMVNC_BUILD_OS fedora
|
|
||||||
ENV KASMVNC_BUILD_OS_CODENAME thirtythree
|
|
||||||
ENV XORG_VER 1.20.10
|
|
||||||
|
|
||||||
# RUN dnf install -y build-dep xorg-server libxfont-dev sudo
|
|
||||||
RUN dnf install -y gcc cmake git gnutls-devel vim wget
|
|
||||||
#tightvncserver
|
|
||||||
RUN dnf install -y libjpeg-turbo-devel libpng-devel libtiff-devel giflib-devel openssl-devel
|
|
||||||
|
|
||||||
#libavcodec-dev
|
|
||||||
RUN dnf -y install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
|
|
||||||
RUN dnf -y install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
|
|
||||||
RUN dnf -y install ffmpeg-devel
|
|
||||||
|
|
||||||
RUN dnf install -y make
|
|
||||||
RUN dnf group install -y "Development Tools"
|
|
||||||
RUN dnf install -y xorg-x11-server-devel zlib-devel libjpeg-turbo-devel
|
|
||||||
RUN dnf install -y libxkbfile-devel libXfont2-devel xorg-x11-font-utils \
|
|
||||||
xorg-x11-xtrans-devel xorg-x11-xkb-utils-devel libXrandr-devel libXtst-devel \
|
|
||||||
libXcursor-devel
|
|
||||||
RUN dnf install -y mesa-dri-drivers
|
|
||||||
RUN dnf install -y bzip2 redhat-lsb-core
|
|
||||||
|
|
||||||
# Additions for webp
|
|
||||||
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz
|
|
||||||
RUN cd /tmp && tar -xzf /tmp/libwebp-*
|
|
||||||
RUN cd /tmp/libwebp-1.0.2 && \
|
|
||||||
./configure --enable-static --disable-shared && \
|
|
||||||
make && make install
|
|
||||||
|
|
||||||
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
|
||||||
|
|
||||||
COPY --chown=docker:docker . /src/
|
|
||||||
|
|
||||||
USER docker
|
|
||||||
ENTRYPOINT ["/src/builder/build.sh"]
|
|
@ -14,16 +14,14 @@ RUN apt-get update && \
|
|||||||
|
|
||||||
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
|
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
|
||||||
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
|
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
|
||||||
RUN apt-get update && apt-get -y install gcc-11 g++-11
|
RUN apt-get update && apt-get -y install gcc-11 g++-11 curl
|
||||||
RUN apt-get update && apt-get -y install cmake git libjpeg-dev libgnutls28-dev vim wget tightvncserver
|
RUN apt-get update && apt-get -y install cmake git libgnutls28-dev vim wget tightvncserver
|
||||||
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
||||||
|
|
||||||
# Additions for webp
|
ENV SCRIPTS_DIR=/tmp/scripts
|
||||||
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz
|
COPY builder/scripts $SCRIPTS_DIR
|
||||||
RUN cd /tmp && tar -xzf /tmp/libwebp-*
|
RUN $SCRIPTS_DIR/build-webp
|
||||||
RUN cd /tmp/libwebp-1.0.2 && \
|
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||||
./configure --enable-static --disable-shared && \
|
|
||||||
make -j$(nproc) && make install
|
|
||||||
|
|
||||||
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
|
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM opensuse/leap:15.3
|
FROM opensuse/leap:15.5
|
||||||
|
|
||||||
ENV STARTUPDIR=/dockerstartup
|
ENV STARTUPDIR=/dockerstartup
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM opensuse/leap:15.3
|
FROM opensuse/leap:15.5
|
||||||
|
|
||||||
ENV KASMVNC_BUILD_OS opensuse
|
ENV KASMVNC_BUILD_OS opensuse
|
||||||
ENV KASMVNC_BUILD_OS_CODENAME 15
|
ENV KASMVNC_BUILD_OS_CODENAME 15
|
||||||
@ -9,6 +9,7 @@ RUN zypper install -ny \
|
|||||||
bdftopcf \
|
bdftopcf \
|
||||||
bigreqsproto-devel \
|
bigreqsproto-devel \
|
||||||
cmake \
|
cmake \
|
||||||
|
curl \
|
||||||
ffmpeg-4-libavcodec-devel \
|
ffmpeg-4-libavcodec-devel \
|
||||||
fonttosfnt \
|
fonttosfnt \
|
||||||
font-util \
|
font-util \
|
||||||
@ -19,14 +20,17 @@ RUN zypper install -ny \
|
|||||||
gzip \
|
gzip \
|
||||||
lbzip2 \
|
lbzip2 \
|
||||||
libbz2-devel \
|
libbz2-devel \
|
||||||
|
libgbm-devel \
|
||||||
libGLw-devel \
|
libGLw-devel \
|
||||||
libgnutls-devel \
|
libgnutls-devel \
|
||||||
libjpeg8-devel \
|
|
||||||
libopenssl-devel \
|
libopenssl-devel \
|
||||||
libpng16-devel \
|
libpng16-devel \
|
||||||
|
libpnglite0 \
|
||||||
|
png++-devel \
|
||||||
libtiff-devel \
|
libtiff-devel \
|
||||||
libXfont2-devel \
|
libXfont2-devel \
|
||||||
libxkbcommon-x11-devel \
|
libxkbcommon-x11-devel \
|
||||||
|
libxshmfence-devel \
|
||||||
make \
|
make \
|
||||||
Mesa-dri \
|
Mesa-dri \
|
||||||
Mesa-libglapi-devel \
|
Mesa-libglapi-devel \
|
||||||
@ -41,12 +45,10 @@ RUN zypper install -ny \
|
|||||||
xorg-x11-util-devel \
|
xorg-x11-util-devel \
|
||||||
zlib-devel
|
zlib-devel
|
||||||
|
|
||||||
# Additions for webp
|
ENV SCRIPTS_DIR=/tmp/scripts
|
||||||
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz
|
COPY builder/scripts $SCRIPTS_DIR
|
||||||
RUN cd /tmp && tar -xzf /tmp/libwebp-*
|
RUN $SCRIPTS_DIR/build-webp
|
||||||
RUN cd /tmp/libwebp-1.0.2 && \
|
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||||
./configure --enable-static --disable-shared && \
|
|
||||||
make && make install
|
|
||||||
|
|
||||||
RUN useradd -u 1000 docker && \
|
RUN useradd -u 1000 docker && \
|
||||||
groupadd -g 1000 docker && \
|
groupadd -g 1000 docker && \
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM opensuse/leap:15.3
|
FROM opensuse/leap:15.5
|
||||||
|
|
||||||
ENV KASMVNC_BUILD_OS opensuse
|
ENV KASMVNC_BUILD_OS opensuse
|
||||||
ENV KASMVNC_BUILD_OS_CODENAME 15
|
ENV KASMVNC_BUILD_OS_CODENAME 15
|
||||||
|
@ -5,7 +5,10 @@ ENV KASMVNC_BUILD_OS_CODENAME 8
|
|||||||
ENV XORG_VER 1.20.10
|
ENV XORG_VER 1.20.10
|
||||||
|
|
||||||
# Install from stock repos
|
# Install from stock repos
|
||||||
RUN dnf install -y \
|
RUN \
|
||||||
|
dnf install -y 'dnf-command(config-manager)' && \
|
||||||
|
dnf config-manager --set-enabled ol8_codeready_builder && \
|
||||||
|
dnf install -y \
|
||||||
bzip2-devel \
|
bzip2-devel \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
cmake \
|
cmake \
|
||||||
@ -17,9 +20,10 @@ RUN dnf install -y \
|
|||||||
libjpeg-turbo-devel \
|
libjpeg-turbo-devel \
|
||||||
libpng-devel \
|
libpng-devel \
|
||||||
libtiff-devel \
|
libtiff-devel \
|
||||||
|
libxshmfence-devel \
|
||||||
make \
|
make \
|
||||||
mesa-dri-drivers \
|
mesa-dri-drivers \
|
||||||
openssl-devel \
|
mesa-libgbm-devel \
|
||||||
openssl-devel \
|
openssl-devel \
|
||||||
patch \
|
patch \
|
||||||
tigervnc-server \
|
tigervnc-server \
|
||||||
@ -46,12 +50,10 @@ RUN dnf install -y \
|
|||||||
libXtst-devel \
|
libXtst-devel \
|
||||||
libXcursor-devel
|
libXcursor-devel
|
||||||
|
|
||||||
# Additions for webp
|
ENV SCRIPTS_DIR=/tmp/scripts
|
||||||
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz
|
COPY builder/scripts $SCRIPTS_DIR
|
||||||
RUN cd /tmp && tar -xzf /tmp/libwebp-*
|
RUN $SCRIPTS_DIR/build-webp
|
||||||
RUN cd /tmp/libwebp-1.0.2 && \
|
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||||
./configure --enable-static --disable-shared && \
|
|
||||||
make && make install
|
|
||||||
|
|
||||||
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ RUN dnf install -y \
|
|||||||
tree \
|
tree \
|
||||||
vim
|
vim
|
||||||
|
|
||||||
COPY oracle/*.spec /tmp
|
COPY oracle/kasmvncserver.spec /tmp
|
||||||
RUN dnf builddep -y /tmp/*.spec
|
RUN dnf builddep -y /tmp/*.spec
|
||||||
|
|
||||||
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||||
|
25
builder/dockerfile.oracle_9.barebones.rpm.test
Normal file
25
builder/dockerfile.oracle_9.barebones.rpm.test
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
FROM oraclelinux:9
|
||||||
|
|
||||||
|
ENV STARTUPDIR=/dockerstartup
|
||||||
|
|
||||||
|
RUN dnf install -y \
|
||||||
|
less \
|
||||||
|
vim \
|
||||||
|
xterm
|
||||||
|
RUN dnf config-manager --set-enabled ol9_codeready_builder
|
||||||
|
RUN dnf install -y oracle-epel-release-el9
|
||||||
|
|
||||||
|
ARG KASMVNC_PACKAGE_DIR
|
||||||
|
COPY $KASMVNC_PACKAGE_DIR/*.rpm /tmp
|
||||||
|
RUN dnf localinstall -y /tmp/*.rpm
|
||||||
|
|
||||||
|
RUN dnf install -y crypto-policies-scripts
|
||||||
|
RUN update-crypto-policies --set FIPS:SHA1
|
||||||
|
|
||||||
|
RUN mkdir -p $STARTUPDIR
|
||||||
|
COPY startup/vnc_startup_barebones.sh $STARTUPDIR
|
||||||
|
|
||||||
|
RUN useradd -m foo
|
||||||
|
USER foo:kasmvnc-cert
|
||||||
|
|
||||||
|
ENTRYPOINT "/$STARTUPDIR/vnc_startup_barebones.sh"
|
63
builder/dockerfile.oracle_9.build
Normal file
63
builder/dockerfile.oracle_9.build
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
FROM oraclelinux:9
|
||||||
|
|
||||||
|
ENV KASMVNC_BUILD_OS oracle
|
||||||
|
ENV KASMVNC_BUILD_OS_CODENAME 9
|
||||||
|
ENV XORG_VER 1.20.10
|
||||||
|
|
||||||
|
# Install from stock repos
|
||||||
|
RUN \
|
||||||
|
dnf config-manager --set-enabled ol9_codeready_builder && \
|
||||||
|
dnf config-manager --set-enabled ol9_distro_builder && \
|
||||||
|
dnf install -y \
|
||||||
|
bzip2-devel \
|
||||||
|
ca-certificates \
|
||||||
|
cmake \
|
||||||
|
dnf-plugins-core \
|
||||||
|
gcc \
|
||||||
|
gcc-c++ \
|
||||||
|
git \
|
||||||
|
gnutls-devel \
|
||||||
|
libjpeg-turbo-devel \
|
||||||
|
libpng-devel \
|
||||||
|
libtiff-devel \
|
||||||
|
libxshmfence-devel \
|
||||||
|
make \
|
||||||
|
mesa-dri-drivers \
|
||||||
|
mesa-libGL-devel \
|
||||||
|
mesa-libgbm-devel \
|
||||||
|
openssl-devel \
|
||||||
|
openssl-devel \
|
||||||
|
patch \
|
||||||
|
tigervnc-server \
|
||||||
|
wget \
|
||||||
|
xorg-x11-font-utils \
|
||||||
|
zlib-devel
|
||||||
|
|
||||||
|
# Enable additional repos (epel, powertools, and fusion)
|
||||||
|
RUN dnf install -y oracle-epel-release-el9
|
||||||
|
RUN dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm
|
||||||
|
|
||||||
|
# Install from new repos
|
||||||
|
RUN dnf install -y \
|
||||||
|
giflib-devel \
|
||||||
|
lbzip2 \
|
||||||
|
libXfont2-devel \
|
||||||
|
libxkbfile-devel \
|
||||||
|
xorg-x11-server-devel \
|
||||||
|
xorg-x11-xtrans-devel \
|
||||||
|
libXrandr-devel \
|
||||||
|
libXtst-devel \
|
||||||
|
libXcursor-devel
|
||||||
|
|
||||||
|
|
||||||
|
ENV SCRIPTS_DIR=/tmp/scripts
|
||||||
|
COPY builder/scripts $SCRIPTS_DIR
|
||||||
|
RUN $SCRIPTS_DIR/build-webp
|
||||||
|
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||||
|
|
||||||
|
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||||
|
|
||||||
|
COPY --chown=docker:docker . /src/
|
||||||
|
|
||||||
|
USER docker
|
||||||
|
ENTRYPOINT ["/src/builder/build.sh"]
|
23
builder/dockerfile.oracle_9.rpm.build
Normal file
23
builder/dockerfile.oracle_9.rpm.build
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
FROM oraclelinux:9
|
||||||
|
|
||||||
|
ENV KASMVNC_BUILD_OS oracle
|
||||||
|
ENV KASMVNC_BUILD_OS_CODENAME 9
|
||||||
|
|
||||||
|
RUN dnf config-manager --set-enabled ol9_codeready_builder
|
||||||
|
RUN dnf config-manager --set-enabled ol9_distro_builder
|
||||||
|
RUN dnf install -y \
|
||||||
|
gpg* \
|
||||||
|
less \
|
||||||
|
redhat-lsb-core \
|
||||||
|
rng-tools \
|
||||||
|
rpm* \
|
||||||
|
rpmlint \
|
||||||
|
rsync \
|
||||||
|
tree \
|
||||||
|
vim
|
||||||
|
|
||||||
|
COPY oracle/kasmvncserver9.spec /tmp
|
||||||
|
|
||||||
|
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||||
|
|
||||||
|
USER docker
|
@ -1,21 +0,0 @@
|
|||||||
FROM ubuntu:16.04
|
|
||||||
|
|
||||||
RUN sed -i 's$# deb-src$deb-src$' /etc/apt/sources.list
|
|
||||||
|
|
||||||
RUN apt-get update && \
|
|
||||||
apt-get -y install sudo
|
|
||||||
|
|
||||||
RUN apt-get -y build-dep xorg-server
|
|
||||||
RUN apt-get -y install cmake git libjpeg-dev libgnutls-dev vim wget tightvncserver
|
|
||||||
RUN apt-get -y install libjpeg-dev libpng-dev libtiff-dev libgif-dev
|
|
||||||
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz
|
|
||||||
RUN cd /tmp && tar -xzvf /tmp/libwebp-*
|
|
||||||
RUN cd /tmp/libwebp-1.0.2 && ./configure && make && make install
|
|
||||||
|
|
||||||
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
|
|
||||||
|
|
||||||
COPY --chown=docker:docker . /src/
|
|
||||||
|
|
||||||
|
|
||||||
USER docker
|
|
||||||
ENTRYPOINT ["/src/builder/build.sh"]
|
|
@ -1,39 +0,0 @@
|
|||||||
FROM ubuntu:18.04
|
|
||||||
|
|
||||||
ENV KASMVNC_BUILD_OS ubuntu
|
|
||||||
ENV KASMVNC_BUILD_OS_CODENAME bionic
|
|
||||||
ENV XORG_VER 1.20.10
|
|
||||||
|
|
||||||
RUN sed -i 's$# deb-src$deb-src$' /etc/apt/sources.list
|
|
||||||
|
|
||||||
RUN apt-get update && \
|
|
||||||
apt-get -y install sudo
|
|
||||||
|
|
||||||
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
|
|
||||||
RUN apt-get update && apt-get -y install cmake git libgnutls28-dev vim wget tightvncserver
|
|
||||||
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y cmake nasm gcc
|
|
||||||
RUN git clone https://github.com/libjpeg-turbo/libjpeg-turbo.git
|
|
||||||
RUN export MAKEFLAGS=-j`nproc`; cd libjpeg-turbo && cmake -G"Unix Makefiles" && make deb
|
|
||||||
RUN export MAKEFLAGS=-j`nproc`; cd libjpeg-turbo && cmake -DCMAKE_INSTALL_PREFIX=/usr/local -G"Unix Makefiles" && make && make install
|
|
||||||
|
|
||||||
# Additions for webp
|
|
||||||
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz
|
|
||||||
RUN cd /tmp && tar -xzf /tmp/libwebp-*
|
|
||||||
RUN cd /tmp/libwebp-1.0.2 && \
|
|
||||||
./configure --enable-static --disable-shared && \
|
|
||||||
make && make install
|
|
||||||
|
|
||||||
# Fix for older required libs
|
|
||||||
#RUN cd /tmp && wget http://launchpadlibrarian.net/347526424/libxfont1-dev_1.5.2-4ubuntu2_amd64.deb && \
|
|
||||||
# wget http://launchpadlibrarian.net/347526425/libxfont1_1.5.2-4ubuntu2_amd64.deb && \
|
|
||||||
# dpkg -i libxfont1_1.5.2-4ubuntu2_amd64.deb && \
|
|
||||||
# dpkg -i libxfont1-dev_1.5.2-4ubuntu2_amd64.deb
|
|
||||||
|
|
||||||
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
|
|
||||||
|
|
||||||
COPY --chown=docker:docker . /src
|
|
||||||
|
|
||||||
USER docker
|
|
||||||
ENTRYPOINT ["/src/builder/build.sh"]
|
|
@ -10,15 +10,13 @@ RUN apt-get update && \
|
|||||||
apt-get -y install sudo
|
apt-get -y install sudo
|
||||||
|
|
||||||
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
|
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
|
||||||
RUN apt-get update && apt-get -y install cmake git libjpeg-dev libgnutls28-dev vim wget tightvncserver
|
RUN apt-get update && apt-get -y install cmake git libgnutls28-dev vim wget tightvncserver curl
|
||||||
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
||||||
|
|
||||||
# Additions for webp
|
ENV SCRIPTS_DIR=/tmp/scripts
|
||||||
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz
|
COPY builder/scripts $SCRIPTS_DIR
|
||||||
RUN cd /tmp && tar -xzf /tmp/libwebp-*
|
RUN $SCRIPTS_DIR/build-webp
|
||||||
RUN cd /tmp/libwebp-1.0.2 && \
|
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||||
./configure --enable-static --disable-shared && \
|
|
||||||
make && make install
|
|
||||||
|
|
||||||
# Fix for older required libs
|
# Fix for older required libs
|
||||||
#RUN cd /tmp && wget http://launchpadlibrarian.net/347526424/libxfont1-dev_1.5.2-4ubuntu2_amd64.deb && \
|
#RUN cd /tmp && wget http://launchpadlibrarian.net/347526424/libxfont1-dev_1.5.2-4ubuntu2_amd64.deb && \
|
||||||
|
@ -29,7 +29,7 @@ WORKDIR $HOME
|
|||||||
|
|
||||||
### REQUIRED STUFF ###
|
### REQUIRED STUFF ###
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext libjpeg-dev wget
|
RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext wget
|
||||||
RUN apt-get purge -y pm-utils xscreensaver*
|
RUN apt-get purge -y pm-utils xscreensaver*
|
||||||
|
|
||||||
RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc
|
RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc
|
||||||
|
@ -2,9 +2,13 @@ FROM ubuntu:focal
|
|||||||
|
|
||||||
ENV STARTUPDIR=/dockerstartup
|
ENV STARTUPDIR=/dockerstartup
|
||||||
|
|
||||||
|
COPY ./builder/scripts/ /tmp/scripts/
|
||||||
|
COPY ./debian/changelog /tmp
|
||||||
|
|
||||||
ARG KASMVNC_PACKAGE_DIR
|
ARG KASMVNC_PACKAGE_DIR
|
||||||
COPY $KASMVNC_PACKAGE_DIR/kasmvncserver_*.deb /tmp/
|
COPY $KASMVNC_PACKAGE_DIR/kasmvncserver_*.deb /tmp/
|
||||||
RUN rm -f /tmp/kasmvncserver_*+*.deb; apt-get update && dpkg -i /tmp/*.deb; apt-get -yf install
|
RUN /tmp/scripts/install_kasmvncserver_package
|
||||||
|
|
||||||
RUN apt-get update && apt-get -y install xterm lsb-release
|
RUN apt-get update && apt-get -y install xterm lsb-release
|
||||||
|
|
||||||
RUN mkdir -p $STARTUPDIR
|
RUN mkdir -p $STARTUPDIR
|
||||||
|
@ -12,15 +12,13 @@ RUN apt-get update && \
|
|||||||
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends tzdata
|
RUN apt-get update && apt-get install -y --no-install-recommends tzdata
|
||||||
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
|
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
|
||||||
RUN apt-get update && apt-get -y install cmake git libjpeg-dev vim wget
|
RUN apt-get update && apt-get -y install cmake git vim wget curl
|
||||||
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
||||||
|
|
||||||
# Additions for webp
|
ENV SCRIPTS_DIR=/tmp/scripts
|
||||||
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz
|
COPY builder/scripts $SCRIPTS_DIR
|
||||||
RUN cd /tmp && tar -xzf /tmp/libwebp-*
|
RUN $SCRIPTS_DIR/build-webp
|
||||||
RUN cd /tmp/libwebp-1.0.2 && \
|
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||||
./configure --enable-static --disable-shared && \
|
|
||||||
make && make install
|
|
||||||
|
|
||||||
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
|
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ WORKDIR $HOME
|
|||||||
|
|
||||||
### REQUIRED STUFF ###
|
### REQUIRED STUFF ###
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext libjpeg-dev wget
|
RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext wget
|
||||||
RUN apt-get purge -y pm-utils xscreensaver*
|
RUN apt-get purge -y pm-utils xscreensaver*
|
||||||
|
|
||||||
RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc
|
RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc
|
||||||
|
@ -12,15 +12,13 @@ RUN apt-get update && \
|
|||||||
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends tzdata
|
RUN apt-get update && apt-get install -y --no-install-recommends tzdata
|
||||||
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
|
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
|
||||||
RUN apt-get update && apt-get -y install cmake git libjpeg-dev libgnutls28-dev vim wget tightvncserver
|
RUN apt-get update && apt-get -y install cmake git libgnutls28-dev vim wget tightvncserver curl
|
||||||
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
||||||
|
|
||||||
# Additions for webp
|
ENV SCRIPTS_DIR=/tmp/scripts
|
||||||
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz
|
COPY builder/scripts $SCRIPTS_DIR
|
||||||
RUN cd /tmp && tar -xzf /tmp/libwebp-*
|
RUN $SCRIPTS_DIR/build-webp
|
||||||
RUN cd /tmp/libwebp-1.0.2 && \
|
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||||
./configure --enable-static --disable-shared && \
|
|
||||||
make && make install
|
|
||||||
|
|
||||||
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
|
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ WORKDIR $HOME
|
|||||||
|
|
||||||
### REQUIRED STUFF ###
|
### REQUIRED STUFF ###
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext libjpeg-dev wget
|
RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext wget
|
||||||
RUN apt-get purge -y pm-utils xscreensaver*
|
RUN apt-get purge -y pm-utils xscreensaver*
|
||||||
|
|
||||||
RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc
|
RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
default_os=${default_os:-ubuntu}
|
default_os=${default_os:-ubuntu}
|
||||||
default_os_codename=${default_os_codename:-bionic}
|
default_os_codename=${default_os_codename:-bionic}
|
||||||
|
|
||||||
|
49
builder/process_test_options.sh
Normal file
49
builder/process_test_options.sh
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo >&2 "Usage: $(basename "$0") [-s|--shell] [-p|--perf-test] [-h|--help] <distro> <distro_version>"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
process_options() {
|
||||||
|
local sorted_options=$(getopt -o psh --long perf-test --long shell --long help -- "$@")
|
||||||
|
eval set -- $sorted_options
|
||||||
|
|
||||||
|
while : ; do
|
||||||
|
case "$1" in
|
||||||
|
-p|--perf-test)
|
||||||
|
entrypoint_args='-interface 0.0.0.0 -selfBench :1'
|
||||||
|
entrypoint_executable="--entrypoint=/usr/bin/Xvnc"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-s|--shell)
|
||||||
|
entrypoint_executable="--entrypoint=bash"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
print_usage=1
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
leftover_options=("$@")
|
||||||
|
}
|
||||||
|
|
||||||
|
declare -a leftover_options
|
||||||
|
|
||||||
|
if [ "$#" -eq 0 ]; then
|
||||||
|
usage
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
process_options "$@"
|
||||||
|
set -- "${leftover_options[@]}"
|
||||||
|
|
||||||
|
if [ -n "$print_usage" ]; then
|
||||||
|
usage
|
||||||
|
exit
|
||||||
|
fi
|
36
builder/scripts/build-libjpeg-turbo
Executable file
36
builder/scripts/build-libjpeg-turbo
Executable file
@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
build_and_install() {
|
||||||
|
export MAKEFLAGS=-j`nproc`
|
||||||
|
export CFLAGS="-fpic"
|
||||||
|
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -G"Unix Makefiles"
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
}
|
||||||
|
|
||||||
|
install_build_dependencies() {
|
||||||
|
install_packages cmake gcc
|
||||||
|
ensure_libjpeg_is_fast
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_libjpeg_is_fast() {
|
||||||
|
install_packages nasm
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_libjpeg_source() {
|
||||||
|
export JPEG_TURBO_RELEASE=$(curl -sX GET "https://api.github.com/repos/libjpeg-turbo/libjpeg-turbo/releases/latest" \
|
||||||
|
| awk '/tag_name/{print $4;exit}' FS='[""]')
|
||||||
|
mkdir libjpeg-turbo
|
||||||
|
curl -Ls "https://github.com/libjpeg-turbo/libjpeg-turbo/archive/${JPEG_TURBO_RELEASE}.tar.gz" | \
|
||||||
|
tar xzvf - -C libjpeg-turbo/ --strip-components=1
|
||||||
|
cd libjpeg-turbo
|
||||||
|
}
|
||||||
|
|
||||||
|
source_dir=$(dirname "$0")
|
||||||
|
. "$source_dir/common.sh"
|
||||||
|
|
||||||
|
install_build_dependencies
|
||||||
|
prepare_libjpeg_source
|
||||||
|
build_and_install
|
23
builder/scripts/build-webp
Executable file
23
builder/scripts/build-webp
Executable file
@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
webp_tar_url=https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.2.4.tar.gz
|
||||||
|
|
||||||
|
prepare_source() {
|
||||||
|
cd /tmp
|
||||||
|
wget "$webp_tar_url"
|
||||||
|
tar -xzf /tmp/libwebp-*
|
||||||
|
rm /tmp/libwebp-*.tar.gz
|
||||||
|
cd /tmp/libwebp-*
|
||||||
|
}
|
||||||
|
|
||||||
|
build_and_install() {
|
||||||
|
export MAKEFLAGS=-j`nproc`
|
||||||
|
./configure --enable-static --disable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_source
|
||||||
|
build_and_install
|
34
builder/scripts/common.sh
Normal file
34
builder/scripts/common.sh
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
detect_distro() {
|
||||||
|
if [ -f /etc/centos-release ]; then
|
||||||
|
DISTRO=centos
|
||||||
|
elif [ -f /etc/oracle-release ]; then
|
||||||
|
DISTRO=oracle
|
||||||
|
elif [ -f /etc/fedora-release ]; then
|
||||||
|
DISTRO=fedora
|
||||||
|
elif [ -f /usr/bin/zypper ]; then
|
||||||
|
DISTRO=opensuse
|
||||||
|
elif [ -f /etc/alpine-release ]; then
|
||||||
|
DISTRO=alpine
|
||||||
|
else
|
||||||
|
DISTRO=debian
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_packages() {
|
||||||
|
local install_cmd=no-command-defined
|
||||||
|
|
||||||
|
case "$DISTRO" in
|
||||||
|
centos) install_cmd="yum install -y" ;;
|
||||||
|
oracle) install_cmd="dnf install -y" ;;
|
||||||
|
fedora) install_cmd="dnf install -y" ;;
|
||||||
|
opensuse) install_cmd="zypper install -y" ;;
|
||||||
|
alpine) install_cmd="apk add" ;;
|
||||||
|
*) install_cmd="apt-get update && apt-get install -y"
|
||||||
|
esac
|
||||||
|
|
||||||
|
eval "$install_cmd $*"
|
||||||
|
}
|
||||||
|
|
||||||
|
detect_distro
|
@ -3,6 +3,7 @@
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
cd "$(dirname "$0")/.."
|
cd "$(dirname "$0")/.."
|
||||||
|
. ./builder/process_test_options.sh
|
||||||
. ./builder/os_ver_cli.sh
|
. ./builder/os_ver_cli.sh
|
||||||
. ./builder/common.sh
|
. ./builder/common.sh
|
||||||
|
|
||||||
@ -11,8 +12,11 @@ docker build --build-arg KASMVNC_PACKAGE_DIR="builder/build/${os_codename}" \
|
|||||||
--build-arg BUILD_DEBIAN_REVISION="$build_debian_revision" \
|
--build-arg BUILD_DEBIAN_REVISION="$build_debian_revision" \
|
||||||
-t "$tester_image" \
|
-t "$tester_image" \
|
||||||
-f "builder/dockerfile.${os}_${os_codename}${build_tag}.deb.test" .
|
-f "builder/dockerfile.${os}_${os_codename}${build_tag}.deb.test" .
|
||||||
|
|
||||||
docker run -it -p "443:$VNC_PORT" --rm \
|
docker run -it -p "443:$VNC_PORT" --rm \
|
||||||
-e KASMVNC_VERBOSE_LOGGING=$KASMVNC_VERBOSE_LOGGING \
|
-e KASMVNC_VERBOSE_LOGGING=$KASMVNC_VERBOSE_LOGGING \
|
||||||
-e "VNC_USER=foo" -e "VNC_PW=foobar" \
|
-e "VNC_USER=foo" -e "VNC_PW=foobar" \
|
||||||
-e "VNC_PORT=$VNC_PORT" \
|
-e "VNC_PORT=$VNC_PORT" \
|
||||||
"$tester_image"
|
$entrypoint_executable \
|
||||||
|
"$tester_image" \
|
||||||
|
$entrypoint_args
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
cd "$(dirname "$0")/.."
|
cd "$(dirname "$0")/.."
|
||||||
|
. ./builder/process_test_options.sh
|
||||||
. ./builder/common.sh
|
. ./builder/common.sh
|
||||||
os="${1:-debian}"
|
os="${1:-debian}"
|
||||||
os_codename="${2:-buster}"
|
os_codename="${2:-buster}"
|
||||||
@ -13,4 +14,6 @@ docker build --build-arg KASMVNC_PACKAGE_DIR="builder/build/${os_codename}" \
|
|||||||
echo
|
echo
|
||||||
docker run -it -p "443:$VNC_PORT" --rm -e "VNC_USER=foo" -e "VNC_PW=foobar" \
|
docker run -it -p "443:$VNC_PORT" --rm -e "VNC_USER=foo" -e "VNC_PW=foobar" \
|
||||||
-e "VNC_PORT=$VNC_PORT" \
|
-e "VNC_PORT=$VNC_PORT" \
|
||||||
kasmvnctester_barebones_${os}:$os_codename
|
$entrypoint_executable \
|
||||||
|
kasmvnctester_barebones_${os}:$os_codename \
|
||||||
|
$entrypoint_args
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
cd "$(dirname "$0")/.."
|
cd "$(dirname "$0")/.."
|
||||||
|
. ./builder/process_test_options.sh
|
||||||
. ./builder/os_ver_cli.sh
|
. ./builder/os_ver_cli.sh
|
||||||
. ./builder/common.sh
|
. ./builder/common.sh
|
||||||
|
|
||||||
@ -16,4 +17,6 @@ docker run -it -p "443:$VNC_PORT" --rm \
|
|||||||
-e KASMVNC_VERBOSE_LOGGING=$KASMVNC_VERBOSE_LOGGING \
|
-e KASMVNC_VERBOSE_LOGGING=$KASMVNC_VERBOSE_LOGGING \
|
||||||
-e "VNC_USER=foo" -e "VNC_PW=foobar" \
|
-e "VNC_USER=foo" -e "VNC_PW=foobar" \
|
||||||
-e "VNC_PORT=$VNC_PORT" \
|
-e "VNC_PORT=$VNC_PORT" \
|
||||||
kasmvnctester_${os}:$os_codename
|
$entrypoint_executable \
|
||||||
|
kasmvnctester_${os}:$os_codename \
|
||||||
|
$entrypoint_args
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
cd "$(dirname "$0")"
|
cd "$(dirname "$0")"
|
||||||
|
. ./process_test_options.sh
|
||||||
. ./common.sh
|
. ./common.sh
|
||||||
os="${1:-centos}"
|
os="${1:-centos}"
|
||||||
os_codename="${2:-core}"
|
os_codename="${2:-core}"
|
||||||
@ -12,4 +13,6 @@ docker build --build-arg KASMVNC_PACKAGE_DIR="build/${os}_${os_codename}" \
|
|||||||
-f dockerfile.${os}_${os_codename}.barebones.rpm.test .
|
-f dockerfile.${os}_${os_codename}.barebones.rpm.test .
|
||||||
docker run -it -p "443:$VNC_PORT" --rm -e "VNC_USER=foo" -e "VNC_PW=foobar" \
|
docker run -it -p "443:$VNC_PORT" --rm -e "VNC_USER=foo" -e "VNC_PW=foobar" \
|
||||||
-e "VNC_PORT=$VNC_PORT" \
|
-e "VNC_PORT=$VNC_PORT" \
|
||||||
kasmvnctester_barebones_${os}:$os_codename
|
$entrypoint_executable \
|
||||||
|
kasmvnctester_barebones_${os}:$os_codename \
|
||||||
|
$entrypoint_args
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
Name: kasmvncserver
|
Name: kasmvncserver
|
||||||
Version: 1.0.0
|
Version: 1.1.0
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: VNC server accessible from a web browser
|
Summary: VNC server accessible from a web browser
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ cp $SRC_BIN/kasmxproxy $DESTDIR/usr/bin;
|
|||||||
cp -r $SRC/lib/kasmvnc/ $DESTDIR/usr/lib/kasmvncserver
|
cp -r $SRC/lib/kasmvnc/ $DESTDIR/usr/lib/kasmvncserver
|
||||||
cd $DESTDIR/usr/bin && ln -s kasmvncpasswd vncpasswd;
|
cd $DESTDIR/usr/bin && ln -s kasmvncpasswd vncpasswd;
|
||||||
cp -r $SRC/share/doc/kasmvnc*/* $DESTDIR/usr/share/doc/kasmvncserver/
|
cp -r $SRC/share/doc/kasmvnc*/* $DESTDIR/usr/share/doc/kasmvncserver/
|
||||||
rsync -r --exclude '.git*' --exclude po2js --exclude xgettext-html \
|
rsync -r --links --safe-links --exclude '.git*' --exclude po2js --exclude xgettext-html \
|
||||||
--exclude www/utils/ --exclude .eslintrc --exclude configure \
|
--exclude www/utils/ --exclude .eslintrc --exclude configure \
|
||||||
$SRC/share/kasmvnc $DESTDIR/usr/share
|
$SRC/share/kasmvnc $DESTDIR/usr/share
|
||||||
|
|
||||||
@ -83,6 +83,8 @@ cd $DST_MAN && ln -s vncpasswd.1 kasmvncpasswd.1;
|
|||||||
%doc /usr/share/doc/kasmvncserver/README.md
|
%doc /usr/share/doc/kasmvncserver/README.md
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Apr 05 2023 KasmTech <info@kasmweb.com> - 1.1.0-1
|
||||||
|
- Upstream release
|
||||||
* Tue Nov 29 2022 KasmTech <info@kasmweb.com> - 1.0.0-1
|
* Tue Nov 29 2022 KasmTech <info@kasmweb.com> - 1.0.0-1
|
||||||
- WebRTC UDP transit support with support of STUN servers
|
- WebRTC UDP transit support with support of STUN servers
|
||||||
- Lossless compression using multi-threaded WASM QOI decoder client side
|
- Lossless compression using multi-threaded WASM QOI decoder client side
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
include_directories(${CMAKE_SOURCE_DIR}/common ${JPEG_INCLUDE_DIR}
|
include_directories(${CMAKE_SOURCE_DIR}/common ${JPEG_INCLUDE_DIR} ${PNG_INCLUDE_DIR}
|
||||||
${CMAKE_SOURCE_DIR}/unix/kasmvncpasswd)
|
${CMAKE_SOURCE_DIR}/unix/kasmvncpasswd)
|
||||||
|
|
||||||
set(RFB_SOURCES
|
set(RFB_SOURCES
|
||||||
@ -65,6 +65,7 @@ set(RFB_SOURCES
|
|||||||
VNCServerST.cxx
|
VNCServerST.cxx
|
||||||
ZRLEEncoder.cxx
|
ZRLEEncoder.cxx
|
||||||
ZRLEDecoder.cxx
|
ZRLEDecoder.cxx
|
||||||
|
Watermark.cxx
|
||||||
cpuid.cxx
|
cpuid.cxx
|
||||||
encodings.cxx
|
encodings.cxx
|
||||||
util.cxx
|
util.cxx
|
||||||
@ -79,7 +80,7 @@ if(WIN32)
|
|||||||
set(RFB_SOURCES ${RFB_SOURCES} WinPasswdValidator.cxx)
|
set(RFB_SOURCES ${RFB_SOURCES} WinPasswdValidator.cxx)
|
||||||
endif(WIN32)
|
endif(WIN32)
|
||||||
|
|
||||||
set(RFB_LIBRARIES ${JPEG_LIBRARIES} os rdr Xregion)
|
set(RFB_LIBRARIES ${JPEG_LIBRARIES} ${PNG_LIBRARIES} os rdr Xregion)
|
||||||
|
|
||||||
if(HAVE_PAM)
|
if(HAVE_PAM)
|
||||||
set(RFB_SOURCES ${RFB_SOURCES} UnixPasswordValidator.cxx
|
set(RFB_SOURCES ${RFB_SOURCES} UnixPasswordValidator.cxx
|
||||||
|
@ -285,6 +285,8 @@ void ConnParams::setEncodings(int nEncodings, const rdr::S32* encodings)
|
|||||||
// QOI-specific overrides
|
// QOI-specific overrides
|
||||||
if (supportsQOI)
|
if (supportsQOI)
|
||||||
useCopyRect = false;
|
useCopyRect = false;
|
||||||
|
if (Server::DLP_WatermarkImage[0])
|
||||||
|
useCopyRect = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConnParams::setLEDState(unsigned int state)
|
void ConnParams::setLEDState(unsigned int state)
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include <rfb/UpdateTracker.h>
|
#include <rfb/UpdateTracker.h>
|
||||||
#include <rfb/LogWriter.h>
|
#include <rfb/LogWriter.h>
|
||||||
#include <rfb/Exception.h>
|
#include <rfb/Exception.h>
|
||||||
|
#include <rfb/Watermark.h>
|
||||||
|
|
||||||
#include <rfb/RawEncoder.h>
|
#include <rfb/RawEncoder.h>
|
||||||
#include <rfb/RREEncoder.h>
|
#include <rfb/RREEncoder.h>
|
||||||
@ -162,6 +163,7 @@ static void updateMaxVideoRes(uint16_t *x, uint16_t *y) {
|
|||||||
EncodeManager::EncodeManager(SConnection* conn_, EncCache *encCache_) : conn(conn_),
|
EncodeManager::EncodeManager(SConnection* conn_, EncCache *encCache_) : conn(conn_),
|
||||||
dynamicQualityMin(-1), dynamicQualityOff(-1),
|
dynamicQualityMin(-1), dynamicQualityOff(-1),
|
||||||
areaCur(0), videoDetected(false), videoTimer(this),
|
areaCur(0), videoDetected(false), videoTimer(this),
|
||||||
|
watermarkStats(0),
|
||||||
maxEncodingTime(0), framesSinceEncPrint(0),
|
maxEncodingTime(0), framesSinceEncPrint(0),
|
||||||
encCache(encCache_)
|
encCache(encCache_)
|
||||||
{
|
{
|
||||||
@ -299,6 +301,11 @@ void EncodeManager::logStats()
|
|||||||
vlog.info(" Total: %s, %s", a, b);
|
vlog.info(" Total: %s, %s", a, b);
|
||||||
iecPrefix(bytes, "B", a, sizeof(a));
|
iecPrefix(bytes, "B", a, sizeof(a));
|
||||||
vlog.info(" %s (1:%g ratio)", a, ratio);
|
vlog.info(" %s (1:%g ratio)", a, ratio);
|
||||||
|
|
||||||
|
if (watermarkData) {
|
||||||
|
siPrefix(watermarkStats, "B", a, sizeof(a));
|
||||||
|
vlog.info(" Watermark data sent: %s", a);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EncodeManager::supported(int encoding)
|
bool EncodeManager::supported(int encoding)
|
||||||
@ -408,8 +415,14 @@ void EncodeManager::doUpdate(bool allowLossy, const Region& changed_,
|
|||||||
nRects += copypassed.size();
|
nRects += copypassed.size();
|
||||||
nRects += computeNumRects(changed);
|
nRects += computeNumRects(changed);
|
||||||
nRects += computeNumRects(cursorRegion);
|
nRects += computeNumRects(cursorRegion);
|
||||||
|
|
||||||
|
if (watermarkData)
|
||||||
|
nRects++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (watermarkData)
|
||||||
|
packWatermark(changed);
|
||||||
|
|
||||||
conn->writer()->writeFramebufferUpdateStart(nRects);
|
conn->writer()->writeFramebufferUpdateStart(nRects);
|
||||||
|
|
||||||
writeCopyRects(copied, copyDelta);
|
writeCopyRects(copied, copyDelta);
|
||||||
@ -427,6 +440,23 @@ void EncodeManager::doUpdate(bool allowLossy, const Region& changed_,
|
|||||||
if (!videoDetected) // In case detection happened between the calls
|
if (!videoDetected) // In case detection happened between the calls
|
||||||
writeRects(cursorRegion, renderedCursor);
|
writeRects(cursorRegion, renderedCursor);
|
||||||
|
|
||||||
|
if (watermarkData) {
|
||||||
|
beforeLength = conn->getOutStream(conn->cp.supportsUdp)->length();
|
||||||
|
|
||||||
|
const Rect rect(0, 0, pb->width(), pb->height());
|
||||||
|
TightEncoder *encoder = ((TightEncoder *) encoders[encoderTight]);
|
||||||
|
|
||||||
|
conn->writer()->startRect(rect, encoder->encoding);
|
||||||
|
encoder->writeWatermarkRect(watermarkData, watermarkDataLen,
|
||||||
|
watermarkInfo.r,
|
||||||
|
watermarkInfo.g,
|
||||||
|
watermarkInfo.b,
|
||||||
|
watermarkInfo.a);
|
||||||
|
conn->writer()->endRect();
|
||||||
|
|
||||||
|
watermarkStats += conn->getOutStream(conn->cp.supportsUdp)->length() - beforeLength;
|
||||||
|
}
|
||||||
|
|
||||||
updateQualities();
|
updateQualities();
|
||||||
|
|
||||||
conn->writer()->writeFramebufferUpdateEnd();
|
conn->writer()->writeFramebufferUpdateEnd();
|
||||||
|
@ -193,6 +193,7 @@ namespace rfb {
|
|||||||
unsigned updates;
|
unsigned updates;
|
||||||
EncoderStats copyStats;
|
EncoderStats copyStats;
|
||||||
StatsVector stats;
|
StatsVector stats;
|
||||||
|
unsigned long long watermarkStats;
|
||||||
int activeType;
|
int activeType;
|
||||||
int beforeLength;
|
int beforeLength;
|
||||||
size_t curMaxUpdateSize;
|
size_t curMaxUpdateSize;
|
||||||
|
@ -239,3 +239,8 @@ void rfb::Region::debug_print(const char* prefix) const
|
|||||||
xrgn->rects[i].y2-xrgn->rects[i].y1);
|
xrgn->rects[i].y2-xrgn->rects[i].y1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool rfb::Region::contains(int x, int y) const
|
||||||
|
{
|
||||||
|
return XPointInRegion(xrgn, x, y);
|
||||||
|
}
|
||||||
|
@ -73,6 +73,8 @@ namespace rfb {
|
|||||||
|
|
||||||
void debug_print(const char *prefix) const;
|
void debug_print(const char *prefix) const;
|
||||||
|
|
||||||
|
bool contains(int x, int y) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
struct _XRegion* xrgn;
|
struct _XRegion* xrgn;
|
||||||
|
@ -185,6 +185,23 @@ rfb::BoolParameter rfb::Server::DLP_RegionAllowRelease
|
|||||||
"Allow click releases inside the blacked-out region",
|
"Allow click releases inside the blacked-out region",
|
||||||
true);
|
true);
|
||||||
|
|
||||||
|
rfb::IntParameter rfb::Server::DLP_WatermarkRepeatSpace
|
||||||
|
("DLP_WatermarkRepeatSpace",
|
||||||
|
"Number of pixels between repeats of the watermark",
|
||||||
|
0, 0, 4096);
|
||||||
|
rfb::StringParameter rfb::Server::DLP_WatermarkImage
|
||||||
|
("DLP_WatermarkImage",
|
||||||
|
"PNG file to use as a watermark",
|
||||||
|
"");
|
||||||
|
rfb::StringParameter rfb::Server::DLP_WatermarkLocation
|
||||||
|
("DLP_WatermarkLocation",
|
||||||
|
"Place the watermark at this position from the corner.",
|
||||||
|
"");
|
||||||
|
rfb::StringParameter rfb::Server::DLP_WatermarkTint
|
||||||
|
("DLP_WatermarkTint",
|
||||||
|
"Tint the greyscale watermark by this color.",
|
||||||
|
"255,255,255,255");
|
||||||
|
|
||||||
rfb::StringParameter rfb::Server::maxVideoResolution
|
rfb::StringParameter rfb::Server::maxVideoResolution
|
||||||
("MaxVideoResolution",
|
("MaxVideoResolution",
|
||||||
"When in video mode, downscale the screen to max this size.",
|
"When in video mode, downscale the screen to max this size.",
|
||||||
|
@ -48,9 +48,13 @@ namespace rfb {
|
|||||||
static IntParameter DLP_ClipAcceptMax;
|
static IntParameter DLP_ClipAcceptMax;
|
||||||
static IntParameter DLP_ClipDelay;
|
static IntParameter DLP_ClipDelay;
|
||||||
static IntParameter DLP_KeyRateLimit;
|
static IntParameter DLP_KeyRateLimit;
|
||||||
|
static IntParameter DLP_WatermarkRepeatSpace;
|
||||||
static StringParameter DLP_ClipLog;
|
static StringParameter DLP_ClipLog;
|
||||||
static StringParameter DLP_Region;
|
static StringParameter DLP_Region;
|
||||||
static StringParameter DLP_Clip_Types;
|
static StringParameter DLP_Clip_Types;
|
||||||
|
static StringParameter DLP_WatermarkImage;
|
||||||
|
static StringParameter DLP_WatermarkLocation;
|
||||||
|
static StringParameter DLP_WatermarkTint;
|
||||||
static BoolParameter DLP_RegionAllowClick;
|
static BoolParameter DLP_RegionAllowClick;
|
||||||
static BoolParameter DLP_RegionAllowRelease;
|
static BoolParameter DLP_RegionAllowRelease;
|
||||||
static IntParameter jpegVideoQuality;
|
static IntParameter jpegVideoQuality;
|
||||||
|
@ -25,7 +25,8 @@ namespace rfb {
|
|||||||
const unsigned int tightPng = 0x0a;
|
const unsigned int tightPng = 0x0a;
|
||||||
const unsigned int tightWebp = 0x0b;
|
const unsigned int tightWebp = 0x0b;
|
||||||
const unsigned int tightQoi = 0x0c;
|
const unsigned int tightQoi = 0x0c;
|
||||||
const unsigned int tightMaxSubencoding = 0x0c;
|
const unsigned int tightIT = 0x0d;
|
||||||
|
const unsigned int tightMaxSubencoding = 0x0d;
|
||||||
|
|
||||||
// Filters to improve compression efficiency
|
// Filters to improve compression efficiency
|
||||||
const unsigned int tightFilterCopy = 0x00;
|
const unsigned int tightFilterCopy = 0x00;
|
||||||
|
@ -277,6 +277,28 @@ void TightEncoder::resetZlib()
|
|||||||
zlibNeedsReset = true;
|
zlibNeedsReset = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TightEncoder::writeWatermarkRect(const rdr::U8 *data, const unsigned len,
|
||||||
|
const rdr::U8 r,
|
||||||
|
const rdr::U8 g,
|
||||||
|
const rdr::U8 b,
|
||||||
|
const rdr::U8 a)
|
||||||
|
{
|
||||||
|
rdr::OutStream* os;
|
||||||
|
|
||||||
|
os = conn->getOutStream(conn->cp.supportsUdp);
|
||||||
|
|
||||||
|
os->writeU8(tightIT << 4);
|
||||||
|
|
||||||
|
writeCompact(os, len + 4);
|
||||||
|
|
||||||
|
os->writeU8(r);
|
||||||
|
os->writeU8(g);
|
||||||
|
os->writeU8(b);
|
||||||
|
os->writeU8(a);
|
||||||
|
|
||||||
|
os->writeBytes(data, len);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Including BPP-dependent implementation of the encoder.
|
// Including BPP-dependent implementation of the encoder.
|
||||||
//
|
//
|
||||||
|
@ -39,6 +39,11 @@ namespace rfb {
|
|||||||
virtual void writeSolidRect(int width, int height,
|
virtual void writeSolidRect(int width, int height,
|
||||||
const PixelFormat& pf,
|
const PixelFormat& pf,
|
||||||
const rdr::U8* colour);
|
const rdr::U8* colour);
|
||||||
|
void writeWatermarkRect(const rdr::U8 *data, const unsigned len,
|
||||||
|
const rdr::U8 r,
|
||||||
|
const rdr::U8 g,
|
||||||
|
const rdr::U8 b,
|
||||||
|
const rdr::U8 a);
|
||||||
void resetZlib();
|
void resetZlib();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -66,7 +66,7 @@ VNCSConnectionST::VNCSConnectionST(VNCServerST* server_, network::Socket *s,
|
|||||||
needsPermCheck(false), pointerEventTime(0),
|
needsPermCheck(false), pointerEventTime(0),
|
||||||
clientHasCursor(false),
|
clientHasCursor(false),
|
||||||
accessRights(AccessDefault), startTime(time(0)), frameTracking(false),
|
accessRights(AccessDefault), startTime(time(0)), frameTracking(false),
|
||||||
udpFramesSinceFull(0)
|
udpFramesSinceFull(0), complainedAboutNoViewRights(false)
|
||||||
{
|
{
|
||||||
setStreams(&sock->inStream(), &sock->outStream());
|
setStreams(&sock->inStream(), &sock->outStream());
|
||||||
peerEndpoint.buf = sock->getPeerEndpoint();
|
peerEndpoint.buf = sock->getPeerEndpoint();
|
||||||
@ -1314,8 +1314,14 @@ void VNCSConnectionST::writeFramebufferUpdate()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(accessRights & AccessView))
|
if (!(accessRights & AccessView)) {
|
||||||
|
if (!complainedAboutNoViewRights) {
|
||||||
|
complainedAboutNoViewRights = true;
|
||||||
|
vlog.error("User %s has no read permissions. If this is not intended, grant them permissions with kasmvncpasswd or via the API",
|
||||||
|
user);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Updates often consists of many small writes, and in continuous
|
// Updates often consists of many small writes, and in continuous
|
||||||
// mode, we will also have small fence messages around the update. We
|
// mode, we will also have small fence messages around the update. We
|
||||||
@ -1783,6 +1789,9 @@ void VNCSConnectionST::udpDowngrade(const bool byServer)
|
|||||||
cp.useCopyRect = true;
|
cp.useCopyRect = true;
|
||||||
encodeManager.resetZlib();
|
encodeManager.resetZlib();
|
||||||
|
|
||||||
|
if (Server::DLP_WatermarkImage[0])
|
||||||
|
cp.useCopyRect = false;
|
||||||
|
|
||||||
vlog.info("Client %s downgrading from udp by %s", sock->getPeerAddress(),
|
vlog.info("Client %s downgrading from udp by %s", sock->getPeerAddress(),
|
||||||
byServer ? "the server" : "its own request");
|
byServer ? "the server" : "its own request");
|
||||||
}
|
}
|
||||||
|
@ -341,6 +341,7 @@ namespace rfb {
|
|||||||
uint32_t udpFramesSinceFull;
|
uint32_t udpFramesSinceFull;
|
||||||
|
|
||||||
char unixRelaySubscriptions[MAX_UNIX_RELAYS][MAX_UNIX_RELAY_NAME_LEN];
|
char unixRelaySubscriptions[MAX_UNIX_RELAYS][MAX_UNIX_RELAY_NAME_LEN];
|
||||||
|
bool complainedAboutNoViewRights;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -62,6 +62,7 @@
|
|||||||
#include <rfb/ServerCore.h>
|
#include <rfb/ServerCore.h>
|
||||||
#include <rfb/VNCServerST.h>
|
#include <rfb/VNCServerST.h>
|
||||||
#include <rfb/VNCSConnectionST.h>
|
#include <rfb/VNCSConnectionST.h>
|
||||||
|
#include <rfb/Watermark.h>
|
||||||
#include <rfb/util.h>
|
#include <rfb/util.h>
|
||||||
#include <rfb/ledStates.h>
|
#include <rfb/ledStates.h>
|
||||||
|
|
||||||
@ -1048,6 +1049,9 @@ void VNCServerST::writeUpdate()
|
|||||||
memset(&jpegstats, 0, sizeof(EncodeManager::codecstats_t));
|
memset(&jpegstats, 0, sizeof(EncodeManager::codecstats_t));
|
||||||
memset(&webpstats, 0, sizeof(EncodeManager::codecstats_t));
|
memset(&webpstats, 0, sizeof(EncodeManager::codecstats_t));
|
||||||
|
|
||||||
|
if (watermarkData)
|
||||||
|
updateWatermark();
|
||||||
|
|
||||||
for (ci = clients.begin(); ci != clients.end(); ci = ci_next) {
|
for (ci = clients.begin(); ci != clients.end(); ci = ci_next) {
|
||||||
ci_next = ci; ci_next++;
|
ci_next = ci; ci_next++;
|
||||||
|
|
||||||
|
@ -257,6 +257,8 @@ namespace rfb {
|
|||||||
|
|
||||||
bool getComparerState();
|
bool getComparerState();
|
||||||
|
|
||||||
|
void updateWatermark();
|
||||||
|
|
||||||
QueryConnectionHandler* queryConnectionHandler;
|
QueryConnectionHandler* queryConnectionHandler;
|
||||||
KeyRemapper* keyRemapper;
|
KeyRemapper* keyRemapper;
|
||||||
|
|
||||||
|
248
common/rfb/Watermark.cxx
Normal file
248
common/rfb/Watermark.cxx
Normal file
@ -0,0 +1,248 @@
|
|||||||
|
/* Copyright (C) 2023 Kasm
|
||||||
|
*
|
||||||
|
* This is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <png.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <zlib.h>
|
||||||
|
#include <rfb/LogWriter.h>
|
||||||
|
#include <rfb/ServerCore.h>
|
||||||
|
#include <rfb/VNCServerST.h>
|
||||||
|
|
||||||
|
#include "Watermark.h"
|
||||||
|
|
||||||
|
using namespace rfb;
|
||||||
|
|
||||||
|
static LogWriter vlog("watermark");
|
||||||
|
|
||||||
|
watermarkInfo_t watermarkInfo;
|
||||||
|
|
||||||
|
uint8_t *watermarkData, *watermarkUnpacked, *watermarkTmp;
|
||||||
|
uint32_t watermarkDataLen;
|
||||||
|
static uint16_t rw, rh;
|
||||||
|
|
||||||
|
#define MAXW 4096
|
||||||
|
#define MAXH 4096
|
||||||
|
|
||||||
|
static bool loadimage(const char path[]) {
|
||||||
|
|
||||||
|
FILE *f = fopen(path, "r");
|
||||||
|
if (!f) {
|
||||||
|
vlog.error("Can't open %s", path);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL);
|
||||||
|
if (!png_ptr) return false;
|
||||||
|
png_infop info = png_create_info_struct(png_ptr);
|
||||||
|
if (!info) return false;
|
||||||
|
if (setjmp(png_jmpbuf(png_ptr))) return false;
|
||||||
|
|
||||||
|
png_init_io(png_ptr, f);
|
||||||
|
png_read_png(png_ptr, info,
|
||||||
|
PNG_TRANSFORM_PACKING |
|
||||||
|
PNG_TRANSFORM_STRIP_16 |
|
||||||
|
PNG_TRANSFORM_STRIP_ALPHA |
|
||||||
|
PNG_TRANSFORM_EXPAND, NULL);
|
||||||
|
|
||||||
|
uint8_t **rows = png_get_rows(png_ptr, info);
|
||||||
|
const unsigned imgw = png_get_image_width(png_ptr, info);
|
||||||
|
const unsigned imgh = png_get_image_height(png_ptr, info);
|
||||||
|
|
||||||
|
watermarkInfo.w = imgw;
|
||||||
|
watermarkInfo.h = imgh;
|
||||||
|
watermarkInfo.src = (uint8_t *) calloc(imgw, imgh);
|
||||||
|
|
||||||
|
unsigned x, y;
|
||||||
|
for (y = 0; y < imgh; y++) {
|
||||||
|
for (x = 0; x < imgw; x++) {
|
||||||
|
const uint8_t r = rows[y][x * 3 + 0];
|
||||||
|
const uint8_t g = rows[y][x * 3 + 1];
|
||||||
|
const uint8_t b = rows[y][x * 3 + 2];
|
||||||
|
|
||||||
|
const uint8_t grey = r * .2126f +
|
||||||
|
g * .7152f +
|
||||||
|
b * .0722f;
|
||||||
|
|
||||||
|
const uint8_t out = (grey + 8) >> 4;
|
||||||
|
watermarkInfo.src[y * imgw + x] = out < 16 ? out : 15;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
png_destroy_info_struct(png_ptr, &info);
|
||||||
|
png_destroy_read_struct(&png_ptr, NULL, NULL);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool watermarkInit() {
|
||||||
|
memset(&watermarkInfo, 0, sizeof(watermarkInfo_t));
|
||||||
|
watermarkData = watermarkUnpacked = watermarkTmp = NULL;
|
||||||
|
rw = rh = 0;
|
||||||
|
|
||||||
|
if (!Server::DLP_WatermarkImage[0])
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (!loadimage(Server::DLP_WatermarkImage))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (Server::DLP_WatermarkRepeatSpace && Server::DLP_WatermarkLocation[0]) {
|
||||||
|
vlog.error("Repeat and location can't be used together");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sscanf(Server::DLP_WatermarkTint, "%hhu,%hhu,%hhu,%hhu",
|
||||||
|
&watermarkInfo.r,
|
||||||
|
&watermarkInfo.g,
|
||||||
|
&watermarkInfo.b,
|
||||||
|
&watermarkInfo.a) != 4) {
|
||||||
|
vlog.error("Invalid tint");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
watermarkInfo.repeat = Server::DLP_WatermarkRepeatSpace;
|
||||||
|
|
||||||
|
if (Server::DLP_WatermarkLocation[0]) {
|
||||||
|
if (sscanf(Server::DLP_WatermarkLocation, "%hd,%hd",
|
||||||
|
&watermarkInfo.x,
|
||||||
|
&watermarkInfo.y) != 2) {
|
||||||
|
vlog.error("Invalid location");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
watermarkUnpacked = (uint8_t *) calloc(MAXW, MAXH);
|
||||||
|
watermarkTmp = (uint8_t *) calloc(MAXW, MAXH / 2);
|
||||||
|
watermarkData = (uint8_t *) calloc(MAXW, MAXH / 2);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// update the screen-size rendered watermark whenever the screen is resized
|
||||||
|
void VNCServerST::updateWatermark() {
|
||||||
|
if (rw == pb->width() &&
|
||||||
|
rh == pb->height())
|
||||||
|
return;
|
||||||
|
|
||||||
|
rw = pb->width();
|
||||||
|
rh = pb->height();
|
||||||
|
|
||||||
|
memset(watermarkUnpacked, 0, rw * rh);
|
||||||
|
|
||||||
|
uint16_t x, y, srcy;
|
||||||
|
|
||||||
|
if (watermarkInfo.repeat) {
|
||||||
|
for (y = 0, srcy = 0; y < rh; y++) {
|
||||||
|
for (x = 0; x < rw;) {
|
||||||
|
if (x + watermarkInfo.w < rw)
|
||||||
|
memcpy(&watermarkUnpacked[y * rw + x],
|
||||||
|
&watermarkInfo.src[srcy * watermarkInfo.w],
|
||||||
|
watermarkInfo.w);
|
||||||
|
else
|
||||||
|
memcpy(&watermarkUnpacked[y * rw + x],
|
||||||
|
&watermarkInfo.src[srcy * watermarkInfo.w],
|
||||||
|
rw - x);
|
||||||
|
|
||||||
|
x += watermarkInfo.w + watermarkInfo.repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
srcy++;
|
||||||
|
if (srcy == watermarkInfo.h) {
|
||||||
|
srcy = 0;
|
||||||
|
y += watermarkInfo.repeat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
int16_t sx, sy;
|
||||||
|
|
||||||
|
if (!watermarkInfo.x)
|
||||||
|
sx = (rw - watermarkInfo.w) / 2;
|
||||||
|
else if (watermarkInfo.x > 0)
|
||||||
|
sx = watermarkInfo.x;
|
||||||
|
else
|
||||||
|
sx = rw - watermarkInfo.w + watermarkInfo.x;
|
||||||
|
|
||||||
|
if (sx < 0)
|
||||||
|
sx = 0;
|
||||||
|
|
||||||
|
if (!watermarkInfo.y)
|
||||||
|
sy = (rh - watermarkInfo.h) / 2;
|
||||||
|
else if (watermarkInfo.y > 0)
|
||||||
|
sy = watermarkInfo.y;
|
||||||
|
else
|
||||||
|
sy = rh - watermarkInfo.h + watermarkInfo.y;
|
||||||
|
|
||||||
|
if (sy < 0)
|
||||||
|
sy = 0;
|
||||||
|
|
||||||
|
for (y = 0; y < watermarkInfo.h; y++) {
|
||||||
|
if (sx + watermarkInfo.w < rw)
|
||||||
|
memcpy(&watermarkUnpacked[(sy + y) * rw + sx],
|
||||||
|
&watermarkInfo.src[y * watermarkInfo.w],
|
||||||
|
watermarkInfo.w);
|
||||||
|
else
|
||||||
|
memcpy(&watermarkUnpacked[(sy + y) * rw + sx],
|
||||||
|
&watermarkInfo.src[y * watermarkInfo.w],
|
||||||
|
rw - sx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void packWatermark(const Region &changed) {
|
||||||
|
// Take the expanded 4-bit data, filter it by the changed rects, pack
|
||||||
|
// to shared bytes, and compress with zlib
|
||||||
|
|
||||||
|
uint16_t x, y;
|
||||||
|
uint8_t pix[2], cur = 0;
|
||||||
|
uint8_t *dst = watermarkTmp;
|
||||||
|
|
||||||
|
const Rect &bounding = changed.get_bounding_rect();
|
||||||
|
|
||||||
|
for (y = 0; y < rh; y++) {
|
||||||
|
// Is the entire line outside the changed area?
|
||||||
|
if (bounding.tl.y > y || bounding.br.y < y) {
|
||||||
|
for (x = 0; x < rw; x++) {
|
||||||
|
pix[cur] = 0;
|
||||||
|
|
||||||
|
if (cur || (y == rh - 1 && x == rw - 1))
|
||||||
|
*dst++ = pix[0] | (pix[1] << 4);
|
||||||
|
|
||||||
|
cur ^= 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (x = 0; x < rw; x++) {
|
||||||
|
pix[cur] = 0;
|
||||||
|
if (bounding.contains(Point(x, y)) && changed.contains(x, y))
|
||||||
|
pix[cur] = watermarkUnpacked[y * rw + x];
|
||||||
|
|
||||||
|
if (cur || (y == rh - 1 && x == rw - 1))
|
||||||
|
*dst++ = pix[0] | (pix[1] << 4);
|
||||||
|
|
||||||
|
cur ^= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uLong destLen = MAXW * MAXH / 2;
|
||||||
|
if (compress2(watermarkData, &destLen, watermarkTmp, rw * rh / 2 + 1, 1) != Z_OK)
|
||||||
|
vlog.error("Zlib compression error");
|
||||||
|
|
||||||
|
watermarkDataLen = destLen;
|
||||||
|
}
|
43
common/rfb/Watermark.h
Normal file
43
common/rfb/Watermark.h
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/* Copyright (C) 2023 Kasm
|
||||||
|
*
|
||||||
|
* This is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef WATERMARK_H
|
||||||
|
#define WATERMARK_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <rfb/Region.h>
|
||||||
|
|
||||||
|
struct watermarkInfo_t {
|
||||||
|
uint8_t *src;
|
||||||
|
uint16_t w, h;
|
||||||
|
|
||||||
|
int16_t x, y;
|
||||||
|
uint16_t repeat;
|
||||||
|
|
||||||
|
uint8_t r, g, b, a;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern watermarkInfo_t watermarkInfo;
|
||||||
|
|
||||||
|
bool watermarkInit();
|
||||||
|
void packWatermark(const rfb::Region &changed); // filter and pack the watermark for sending
|
||||||
|
|
||||||
|
extern uint8_t *watermarkData;
|
||||||
|
extern uint32_t watermarkDataLen;
|
||||||
|
|
||||||
|
#endif
|
4
debian/Makefile.to_fakebuild_tar_package
vendored
4
debian/Makefile.to_fakebuild_tar_package
vendored
@ -22,8 +22,8 @@ install: unpack_tarball
|
|||||||
cp $(SRC_BIN)/kasmxproxy $(DESTDIR)/usr/bin/
|
cp $(SRC_BIN)/kasmxproxy $(DESTDIR)/usr/bin/
|
||||||
cp -r $(SRC)/lib/kasmvnc/ $(DESTDIR)/usr/lib/kasmvncserver
|
cp -r $(SRC)/lib/kasmvnc/ $(DESTDIR)/usr/lib/kasmvncserver
|
||||||
cp -r $(SRC)/share/doc/kasmvnc*/* $(DESTDIR)/usr/share/doc/kasmvncserver/
|
cp -r $(SRC)/share/doc/kasmvnc*/* $(DESTDIR)/usr/share/doc/kasmvncserver/
|
||||||
rsync -r --exclude '.git*' --exclude po2js --exclude xgettext-html \
|
rsync -r --links --safe-links --exclude '.git*' --exclude po2js \
|
||||||
--exclude www/utils/ --exclude .eslintrc \
|
--exclude xgettext-html --exclude www/utils/ --exclude .eslintrc \
|
||||||
$(SRC)/share/kasmvnc $(DESTDIR)/usr/share
|
$(SRC)/share/kasmvnc $(DESTDIR)/usr/share
|
||||||
sed -e 's/^\([^#]\)/# \1/' $(SRC)/share/kasmvnc/kasmvnc_defaults.yaml > \
|
sed -e 's/^\([^#]\)/# \1/' $(SRC)/share/kasmvnc/kasmvnc_defaults.yaml > \
|
||||||
$(DESTDIR)/etc/kasmvnc/kasmvnc.yaml
|
$(DESTDIR)/etc/kasmvnc/kasmvnc.yaml
|
||||||
|
6
debian/changelog
vendored
6
debian/changelog
vendored
@ -1,3 +1,9 @@
|
|||||||
|
kasmvnc (1.1.0-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Kasm Technologies LLC <info@kasmweb.com> Tue, 04 Apr 2023 13:52:14 +0000
|
||||||
|
|
||||||
kasmvnc (1.0.0-1) unstable; urgency=medium
|
kasmvnc (1.0.0-1) unstable; urgency=medium
|
||||||
|
|
||||||
* WebRTC UDP transit support with support of STUN servers
|
* WebRTC UDP transit support with support of STUN servers
|
||||||
|
4
debian/control
vendored
4
debian/control
vendored
@ -3,7 +3,7 @@ Section: x11
|
|||||||
Priority: optional
|
Priority: optional
|
||||||
Maintainer: Kasm Technologies LLC <info@kasmweb.com>
|
Maintainer: Kasm Technologies LLC <info@kasmweb.com>
|
||||||
Build-Depends: debhelper (>= 11), rsync, libjpeg-dev, libjpeg-dev, libpng-dev,
|
Build-Depends: debhelper (>= 11), rsync, libjpeg-dev, libjpeg-dev, libpng-dev,
|
||||||
libtiff-dev, libgif-dev, libavcodec-dev, libssl-dev, libgl1, libxfont2, libsm6, libxext-dev, libxrandr-dev, libxtst-dev, libxcursor-dev, libunwind8
|
libtiff-dev, libgif-dev, libavcodec-dev, libssl-dev, libgl1, libxfont2, libsm6, libxext-dev, libxrandr-dev, libxtst-dev, libxcursor-dev, libunwind8, libgbm-dev
|
||||||
Standards-Version: 4.1.3
|
Standards-Version: 4.1.3
|
||||||
Homepage: https://github.com/kasmtech/KasmVNC
|
Homepage: https://github.com/kasmtech/KasmVNC
|
||||||
#Vcs-Browser: https://salsa.debian.org/debian/kasmvnc
|
#Vcs-Browser: https://salsa.debian.org/debian/kasmvnc
|
||||||
@ -14,7 +14,7 @@ Architecture: amd64 arm64
|
|||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, ssl-cert, xauth,
|
Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, ssl-cert, xauth,
|
||||||
x11-xkb-utils, xkb-data, procps, libswitch-perl, libyaml-tiny-perl,
|
x11-xkb-utils, xkb-data, procps, libswitch-perl, libyaml-tiny-perl,
|
||||||
libhash-merge-simple-perl, libscalar-list-utils-perl, liblist-moreutils-perl,
|
libhash-merge-simple-perl, libscalar-list-utils-perl, liblist-moreutils-perl,
|
||||||
libtry-tiny-perl
|
libtry-tiny-perl, libgbm1
|
||||||
Provides: vnc-server
|
Provides: vnc-server
|
||||||
Description: KasmVNC provides remote web-based access to a Desktop or application.
|
Description: KasmVNC provides remote web-based access to a Desktop or application.
|
||||||
While VNC is in the name, KasmVNC differs from other VNC variants such
|
While VNC is in the name, KasmVNC differs from other VNC variants such
|
||||||
|
126
fedora/kasmvncserver.spec
Normal file
126
fedora/kasmvncserver.spec
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
Name: kasmvncserver
|
||||||
|
Version: 1.1.0
|
||||||
|
Release: 1%{?dist}
|
||||||
|
Summary: VNC server accessible from a web browser
|
||||||
|
|
||||||
|
License: GPLv2+
|
||||||
|
URL: https://github.com/kasmtech/KasmVNC
|
||||||
|
|
||||||
|
BuildRequires: rsync
|
||||||
|
Requires: xorg-x11-xauth, xkeyboard-config, xkbcomp, openssl, perl, perl-Switch, perl-YAML-Tiny, perl-Hash-Merge-Simple, perl-Scalar-List-Utils, perl-List-MoreUtils, perl-Try-Tiny, mesa-libgbm, libxshmfence
|
||||||
|
Conflicts: tigervnc-server, tigervnc-server-minimal
|
||||||
|
|
||||||
|
%description
|
||||||
|
KasmVNC provides remote web-based access to a Desktop or application.
|
||||||
|
While VNC is in the name, KasmVNC differs from other VNC variants such
|
||||||
|
as TigerVNC, RealVNC, and TurboVNC. KasmVNC has broken from the RFB
|
||||||
|
specification which defines VNC, in order to support modern technologies
|
||||||
|
and increase security. KasmVNC is accessed by users from any modern
|
||||||
|
browser and does not support legacy VNC viewer applications. KasmVNC
|
||||||
|
uses a modern YAML based configuration at the server and user level,
|
||||||
|
allowing for ease of management. KasmVNC is maintained by Kasm
|
||||||
|
Technologies Corp, www.kasmweb.com.
|
||||||
|
|
||||||
|
WARNING: this package requires EPEL.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
|
||||||
|
%install
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
|
TARGET_OS=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
|
||||||
|
TARGET_OS_CODENAME=$(lsb_release -cs | tr '[:upper:]' '[:lower:]')
|
||||||
|
TARBALL=$RPM_SOURCE_DIR/kasmvnc.${TARGET_OS}_${TARGET_OS_CODENAME}.tar.gz
|
||||||
|
TAR_DATA=$(mktemp -d)
|
||||||
|
tar -xzf "$TARBALL" -C "$TAR_DATA"
|
||||||
|
|
||||||
|
SRC=$TAR_DATA/usr/local
|
||||||
|
SRC_BIN=$SRC/bin
|
||||||
|
DESTDIR=$RPM_BUILD_ROOT
|
||||||
|
DST_MAN=$DESTDIR/usr/share/man/man1
|
||||||
|
|
||||||
|
mkdir -p $DESTDIR/usr/bin $DESTDIR/usr/share/man/man1 \
|
||||||
|
$DESTDIR/usr/share/doc/kasmvncserver $DESTDIR/usr/lib \
|
||||||
|
$DESTDIR/usr/share/perl5 $DESTDIR/etc/kasmvnc
|
||||||
|
|
||||||
|
cp $SRC_BIN/Xvnc $DESTDIR/usr/bin;
|
||||||
|
cp $SRC_BIN/vncserver $DESTDIR/usr/bin;
|
||||||
|
cp -a $SRC_BIN/KasmVNC $DESTDIR/usr/share/perl5/
|
||||||
|
cp $SRC_BIN/vncconfig $DESTDIR/usr/bin;
|
||||||
|
cp $SRC_BIN/kasmvncpasswd $DESTDIR/usr/bin;
|
||||||
|
cp $SRC_BIN/kasmxproxy $DESTDIR/usr/bin;
|
||||||
|
cp -r $SRC/lib/kasmvnc/ $DESTDIR/usr/lib/kasmvncserver
|
||||||
|
cd $DESTDIR/usr/bin && ln -s kasmvncpasswd vncpasswd;
|
||||||
|
cp -r $SRC/share/doc/kasmvnc*/* $DESTDIR/usr/share/doc/kasmvncserver/
|
||||||
|
rsync -r --links --safe-links --exclude '.git*' --exclude po2js --exclude xgettext-html \
|
||||||
|
--exclude www/utils/ --exclude .eslintrc --exclude configure \
|
||||||
|
$SRC/share/kasmvnc $DESTDIR/usr/share
|
||||||
|
|
||||||
|
sed -i -e 's!pem_certificate: .\+$!pem_certificate: /etc/pki/tls/private/kasmvnc.pem!' \
|
||||||
|
$DESTDIR/usr/share/kasmvnc/kasmvnc_defaults.yaml
|
||||||
|
sed -i -e 's!pem_key: .\+$!pem_key: /etc/pki/tls/private/kasmvnc.pem!' \
|
||||||
|
$DESTDIR/usr/share/kasmvnc/kasmvnc_defaults.yaml
|
||||||
|
sed -e 's/^\([^#]\)/# \1/' $DESTDIR/usr/share/kasmvnc/kasmvnc_defaults.yaml > \
|
||||||
|
$DESTDIR/etc/kasmvnc/kasmvnc.yaml
|
||||||
|
cp $SRC/man/man1/Xvnc.1 $DESTDIR/usr/share/man/man1/;
|
||||||
|
cp $SRC/share/man/man1/vncserver.1 $DST_MAN;
|
||||||
|
cp $SRC/share/man/man1/vncconfig.1 $DST_MAN;
|
||||||
|
cp $SRC/share/man/man1/vncpasswd.1 $DST_MAN;
|
||||||
|
cp $SRC/share/man/man1/kasmxproxy.1 $DST_MAN;
|
||||||
|
cd $DST_MAN && ln -s vncpasswd.1 kasmvncpasswd.1;
|
||||||
|
|
||||||
|
|
||||||
|
%files
|
||||||
|
%config(noreplace) /etc/kasmvnc
|
||||||
|
|
||||||
|
/usr/bin/*
|
||||||
|
/usr/lib/kasmvncserver
|
||||||
|
/usr/share/man/man1/*
|
||||||
|
/usr/share/perl5/KasmVNC
|
||||||
|
/usr/share/kasmvnc
|
||||||
|
|
||||||
|
%license /usr/share/doc/kasmvncserver/LICENSE.TXT
|
||||||
|
%doc /usr/share/doc/kasmvncserver/README.md
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Wed Apr 05 2023 KasmTech <info@kasmweb.com> - 1.1.0-1
|
||||||
|
- Upstream release
|
||||||
|
* Tue Nov 29 2022 KasmTech <info@kasmweb.com> - 1.0.0-1
|
||||||
|
- WebRTC UDP transit support with support of STUN servers
|
||||||
|
- Lossless compression using multi-threaded WASM QOI decoder client side
|
||||||
|
- New yaml based configuration
|
||||||
|
- Significantly improved FPS through both client-side and server-side improvements.
|
||||||
|
- Support for the admin to define arbitrary http response headers for the built in web server
|
||||||
|
- Support for additional mouse buttons
|
||||||
|
- Refinement of vncserver checks and user prompts
|
||||||
|
- Added send_full_frame to developer API, forces full frame to be sent to all connected users that have at least read permission.
|
||||||
|
* Tue Mar 22 2022 KasmTech <info@kasmweb.com> - 0.9.3~beta-1
|
||||||
|
* Fri Feb 12 2021 KasmTech <info@kasmweb.com> - 0.9.1~beta-1
|
||||||
|
- Initial release of the rpm package.
|
||||||
|
|
||||||
|
%post
|
||||||
|
kasmvnc_group="kasmvnc-cert"
|
||||||
|
|
||||||
|
create_kasmvnc_group() {
|
||||||
|
if ! getent group "$kasmvnc_group" >/dev/null; then
|
||||||
|
groupadd --system "$kasmvnc_group"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
make_self_signed_certificate() {
|
||||||
|
local cert_file=/etc/pki/tls/private/kasmvnc.pem
|
||||||
|
[ -f "$cert_file" ] && return 0
|
||||||
|
|
||||||
|
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
|
||||||
|
-keyout "$cert_file" \
|
||||||
|
-out "$cert_file" -subj \
|
||||||
|
"/C=US/ST=VA/L=None/O=None/OU=DoFu/CN=kasm/emailAddress=none@none.none"
|
||||||
|
chgrp "$kasmvnc_group" "$cert_file"
|
||||||
|
chmod 640 "$cert_file"
|
||||||
|
}
|
||||||
|
|
||||||
|
create_kasmvnc_group
|
||||||
|
make_self_signed_certificate
|
||||||
|
|
||||||
|
%postun
|
||||||
|
rm -f /etc/pki/tls/private/kasmvnc.pem
|
2
kasmweb
2
kasmweb
@ -1 +1 @@
|
|||||||
Subproject commit 31b1a93335c1cb4947d4eac06dd1311bb18f5022
|
Subproject commit 3873a5994171f39c4acc92e2e05630584332d72d
|
@ -1,5 +1,5 @@
|
|||||||
Name: kasmvncserver
|
Name: kasmvncserver
|
||||||
Version: 1.0.0
|
Version: 1.1.0
|
||||||
Release: leap15
|
Release: leap15
|
||||||
Summary: VNC server accessible from a web browser
|
Summary: VNC server accessible from a web browser
|
||||||
|
|
||||||
@ -7,7 +7,7 @@ License: GPLv2+
|
|||||||
URL: https://github.com/kasmtech/KasmVNC
|
URL: https://github.com/kasmtech/KasmVNC
|
||||||
|
|
||||||
BuildRequires: rsync
|
BuildRequires: rsync
|
||||||
Requires: xauth, hostname, libxkbcommon-x11-0, xkeyboard-config, x11-tools, openssl, perl, libpixman-1-0, libjpeg8, libgomp1, libXfont2-2, libXdmcp6, libglvnd, xkbcomp, perl-Switch, perl-YAML-Tiny, perl-Hash-Merge-Simple, perl-Scalar-List-Utils, perl-List-MoreUtils, perl-Try-Tiny
|
Requires: xauth, hostname, libxkbcommon-x11-0, xkeyboard-config, x11-tools, openssl, perl, libpixman-1-0, libjpeg8, libgomp1, libXfont2-2, libXdmcp6, libglvnd, xkbcomp, perl-Switch, perl-YAML-Tiny, perl-Hash-Merge-Simple, perl-Scalar-List-Utils, perl-List-MoreUtils, perl-Try-Tiny, libgbm1, libxshmfence1
|
||||||
Conflicts: tigervnc, tigervnc-x11vnc
|
Conflicts: tigervnc, tigervnc-x11vnc
|
||||||
|
|
||||||
%description
|
%description
|
||||||
@ -50,7 +50,7 @@ cp $SRC_BIN/kasmxproxy $DESTDIR/usr/bin;
|
|||||||
cp -r $SRC/lib/kasmvnc/ $DESTDIR/usr/lib/kasmvncserver
|
cp -r $SRC/lib/kasmvnc/ $DESTDIR/usr/lib/kasmvncserver
|
||||||
cd $DESTDIR/usr/bin && ln -s kasmvncpasswd vncpasswd;
|
cd $DESTDIR/usr/bin && ln -s kasmvncpasswd vncpasswd;
|
||||||
cp -r $SRC/share/doc/kasmvnc*/* $DESTDIR/usr/share/doc/kasmvncserver/
|
cp -r $SRC/share/doc/kasmvnc*/* $DESTDIR/usr/share/doc/kasmvncserver/
|
||||||
rsync -r --exclude '.git*' --exclude po2js --exclude xgettext-html \
|
rsync -r --links --safe-links --exclude '.git*' --exclude po2js --exclude xgettext-html \
|
||||||
--exclude www/utils/ --exclude .eslintrc --exclude configure \
|
--exclude www/utils/ --exclude .eslintrc --exclude configure \
|
||||||
$SRC/share/kasmvnc $DESTDIR/usr/share
|
$SRC/share/kasmvnc $DESTDIR/usr/share
|
||||||
|
|
||||||
@ -81,6 +81,8 @@ cd $DST_MAN && ln -s vncpasswd.1 kasmvncpasswd.1;
|
|||||||
%doc /usr/share/doc/kasmvncserver/README.md
|
%doc /usr/share/doc/kasmvncserver/README.md
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Apr 05 2023 KasmTech <info@kasmweb.com> - 1.1.0-leap15
|
||||||
|
- Upstream release
|
||||||
* Tue Nov 29 2022 KasmTech <info@kasmweb.com> - 1.0.0-leap15
|
* Tue Nov 29 2022 KasmTech <info@kasmweb.com> - 1.0.0-leap15
|
||||||
- WebRTC UDP transit support with support of STUN servers
|
- WebRTC UDP transit support with support of STUN servers
|
||||||
- Lossless compression using multi-threaded WASM QOI decoder client side
|
- Lossless compression using multi-threaded WASM QOI decoder client side
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
Name: kasmvncserver
|
Name: kasmvncserver
|
||||||
Version: 1.0.0
|
Version: 1.1.0
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: VNC server accessible from a web browser
|
Summary: VNC server accessible from a web browser
|
||||||
|
|
||||||
@ -7,7 +7,7 @@ License: GPLv2+
|
|||||||
URL: https://github.com/kasmtech/KasmVNC
|
URL: https://github.com/kasmtech/KasmVNC
|
||||||
|
|
||||||
BuildRequires: rsync
|
BuildRequires: rsync
|
||||||
Requires: xorg-x11-xauth, xorg-x11-xkb-utils, xkeyboard-config, xorg-x11-server-utils, openssl, perl, perl-Switch, perl-YAML-Tiny, perl-Hash-Merge-Simple, perl-Scalar-List-Utils, perl-List-MoreUtils, perl-Try-Tiny, hostname
|
Requires: xorg-x11-xauth, xorg-x11-xkb-utils, xkeyboard-config, xorg-x11-server-utils, openssl, perl, perl-Switch, perl-YAML-Tiny, perl-Hash-Merge-Simple, perl-Scalar-List-Utils, perl-List-MoreUtils, perl-Try-Tiny, hostname, mesa-libgbm, libxshmfence
|
||||||
Conflicts: tigervnc-server, tigervnc-server-minimal
|
Conflicts: tigervnc-server, tigervnc-server-minimal
|
||||||
|
|
||||||
%description
|
%description
|
||||||
@ -51,7 +51,7 @@ cp $SRC_BIN/kasmxproxy $DESTDIR/usr/bin;
|
|||||||
cp -r $SRC/lib/kasmvnc/ $DESTDIR/usr/lib/kasmvncserver
|
cp -r $SRC/lib/kasmvnc/ $DESTDIR/usr/lib/kasmvncserver
|
||||||
cd $DESTDIR/usr/bin && ln -s kasmvncpasswd vncpasswd;
|
cd $DESTDIR/usr/bin && ln -s kasmvncpasswd vncpasswd;
|
||||||
cp -r $SRC/share/doc/kasmvnc*/* $DESTDIR/usr/share/doc/kasmvncserver/
|
cp -r $SRC/share/doc/kasmvnc*/* $DESTDIR/usr/share/doc/kasmvncserver/
|
||||||
rsync -r --exclude '.git*' --exclude po2js --exclude xgettext-html \
|
rsync -r --links --safe-links --exclude '.git*' --exclude po2js --exclude xgettext-html \
|
||||||
--exclude www/utils/ --exclude .eslintrc --exclude configure \
|
--exclude www/utils/ --exclude .eslintrc --exclude configure \
|
||||||
$SRC/share/kasmvnc $DESTDIR/usr/share
|
$SRC/share/kasmvnc $DESTDIR/usr/share
|
||||||
|
|
||||||
@ -82,6 +82,8 @@ cd $DST_MAN && ln -s vncpasswd.1 kasmvncpasswd.1;
|
|||||||
%doc /usr/share/doc/kasmvncserver/README.md
|
%doc /usr/share/doc/kasmvncserver/README.md
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Apr 05 2023 KasmTech <info@kasmweb.com> - 1.1.0-1
|
||||||
|
- Upstream release
|
||||||
* Tue Nov 29 2022 KasmTech <info@kasmweb.com> - 1.0.0-1
|
* Tue Nov 29 2022 KasmTech <info@kasmweb.com> - 1.0.0-1
|
||||||
- WebRTC UDP transit support with support of STUN servers
|
- WebRTC UDP transit support with support of STUN servers
|
||||||
- Lossless compression using multi-threaded WASM QOI decoder client side
|
- Lossless compression using multi-threaded WASM QOI decoder client side
|
||||||
|
125
oracle/kasmvncserver9.spec
Normal file
125
oracle/kasmvncserver9.spec
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
Name: kasmvncserver
|
||||||
|
Version: 1.1.0
|
||||||
|
Release: 1%{?dist}
|
||||||
|
Summary: VNC server accessible from a web browser
|
||||||
|
|
||||||
|
License: GPLv2+
|
||||||
|
URL: https://github.com/kasmtech/KasmVNC
|
||||||
|
|
||||||
|
BuildRequires: rsync
|
||||||
|
Requires: xorg-x11-xauth, xkeyboard-config, xorg-x11-server-utils, xkbcomp, openssl, perl, perl-Switch, perl-YAML-Tiny, perl-Hash-Merge-Simple, perl-Scalar-List-Utils, perl-List-MoreUtils, perl-Try-Tiny, hostname, mesa-libgbm, libxshmfence
|
||||||
|
Conflicts: tigervnc-server, tigervnc-server-minimal
|
||||||
|
|
||||||
|
%description
|
||||||
|
KasmVNC provides remote web-based access to a Desktop or application.
|
||||||
|
While VNC is in the name, KasmVNC differs from other VNC variants such
|
||||||
|
as TigerVNC, RealVNC, and TurboVNC. KasmVNC has broken from the RFB
|
||||||
|
specification which defines VNC, in order to support modern technologies
|
||||||
|
and increase security. KasmVNC is accessed by users from any modern
|
||||||
|
browser and does not support legacy VNC viewer applications. KasmVNC
|
||||||
|
uses a modern YAML based configuration at the server and user level,
|
||||||
|
allowing for ease of management. KasmVNC is maintained by Kasm
|
||||||
|
Technologies Corp, www.kasmweb.com.
|
||||||
|
|
||||||
|
WARNING: this package requires EPEL and CodeReady builder.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
|
||||||
|
%install
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
|
TARGET_OS=$KASMVNC_BUILD_OS
|
||||||
|
TARGET_OS_CODENAME=$KASMVNC_BUILD_OS_CODENAME
|
||||||
|
TARBALL=$RPM_SOURCE_DIR/kasmvnc.${TARGET_OS}_${TARGET_OS_CODENAME}.tar.gz
|
||||||
|
TAR_DATA=$(mktemp -d)
|
||||||
|
tar -xzf "$TARBALL" -C "$TAR_DATA"
|
||||||
|
|
||||||
|
SRC=$TAR_DATA/usr/local
|
||||||
|
SRC_BIN=$SRC/bin
|
||||||
|
DESTDIR=$RPM_BUILD_ROOT
|
||||||
|
DST_MAN=$DESTDIR/usr/share/man/man1
|
||||||
|
|
||||||
|
mkdir -p $DESTDIR/usr/bin $DESTDIR/usr/share/man/man1 \
|
||||||
|
$DESTDIR/usr/share/doc/kasmvncserver $DESTDIR/usr/lib \
|
||||||
|
$DESTDIR/usr/share/perl5 $DESTDIR/etc/kasmvnc
|
||||||
|
cp $SRC_BIN/Xvnc $DESTDIR/usr/bin;
|
||||||
|
cp $SRC_BIN/vncserver $DESTDIR/usr/bin;
|
||||||
|
cp -a $SRC_BIN/KasmVNC $DESTDIR/usr/share/perl5
|
||||||
|
cp $SRC_BIN/vncconfig $DESTDIR/usr/bin;
|
||||||
|
cp $SRC_BIN/kasmvncpasswd $DESTDIR/usr/bin;
|
||||||
|
cp $SRC_BIN/kasmxproxy $DESTDIR/usr/bin;
|
||||||
|
cp -r $SRC/lib/kasmvnc/ $DESTDIR/usr/lib/kasmvncserver
|
||||||
|
cd $DESTDIR/usr/bin && ln -s kasmvncpasswd vncpasswd;
|
||||||
|
cp -r $SRC/share/doc/kasmvnc*/* $DESTDIR/usr/share/doc/kasmvncserver/
|
||||||
|
rsync -r --links --safe-links --exclude '.git*' --exclude po2js --exclude xgettext-html \
|
||||||
|
--exclude www/utils/ --exclude .eslintrc --exclude configure \
|
||||||
|
$SRC/share/kasmvnc $DESTDIR/usr/share
|
||||||
|
|
||||||
|
sed -i -e 's!pem_certificate: .\+$!pem_certificate: /etc/pki/tls/private/kasmvnc.pem!' \
|
||||||
|
$DESTDIR/usr/share/kasmvnc/kasmvnc_defaults.yaml
|
||||||
|
sed -i -e 's!pem_key: .\+$!pem_key: /etc/pki/tls/private/kasmvnc.pem!' \
|
||||||
|
$DESTDIR/usr/share/kasmvnc/kasmvnc_defaults.yaml
|
||||||
|
sed -e 's/^\([^#]\)/# \1/' $DESTDIR/usr/share/kasmvnc/kasmvnc_defaults.yaml > \
|
||||||
|
$DESTDIR/etc/kasmvnc/kasmvnc.yaml
|
||||||
|
cp $SRC/man/man1/Xvnc.1 $DESTDIR/usr/share/man/man1/;
|
||||||
|
cp $SRC/share/man/man1/vncserver.1 $DST_MAN;
|
||||||
|
cp $SRC/share/man/man1/vncconfig.1 $DST_MAN;
|
||||||
|
cp $SRC/share/man/man1/vncpasswd.1 $DST_MAN;
|
||||||
|
cp $SRC/share/man/man1/kasmxproxy.1 $DST_MAN;
|
||||||
|
cd $DST_MAN && ln -s vncpasswd.1 kasmvncpasswd.1;
|
||||||
|
|
||||||
|
|
||||||
|
%files
|
||||||
|
%config(noreplace) /etc/kasmvnc
|
||||||
|
|
||||||
|
/usr/bin/*
|
||||||
|
/usr/lib/kasmvncserver
|
||||||
|
/usr/share/man/man1/*
|
||||||
|
/usr/share/perl5/KasmVNC
|
||||||
|
/usr/share/kasmvnc
|
||||||
|
|
||||||
|
%license /usr/share/doc/kasmvncserver/LICENSE.TXT
|
||||||
|
%doc /usr/share/doc/kasmvncserver/README.md
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Wed Apr 05 2023 KasmTech <info@kasmweb.com> - 1.1.0-1
|
||||||
|
- Upstream release
|
||||||
|
* Tue Nov 29 2022 KasmTech <info@kasmweb.com> - 1.0.0-1
|
||||||
|
- WebRTC UDP transit support with support of STUN servers
|
||||||
|
- Lossless compression using multi-threaded WASM QOI decoder client side
|
||||||
|
- New yaml based configuration
|
||||||
|
- Significantly improved FPS through both client-side and server-side improvements.
|
||||||
|
- Support for the admin to define arbitrary http response headers for the built in web server
|
||||||
|
- Support for additional mouse buttons
|
||||||
|
- Refinement of vncserver checks and user prompts
|
||||||
|
- Added send_full_frame to developer API, forces full frame to be sent to all connected users that have at least read permission.
|
||||||
|
* Tue Mar 22 2022 KasmTech <info@kasmweb.com> - 0.9.3~beta-1
|
||||||
|
* Fri Feb 12 2021 KasmTech <info@kasmweb.com> - 0.9.1~beta-1
|
||||||
|
- Initial release of the rpm package.
|
||||||
|
|
||||||
|
%post
|
||||||
|
kasmvnc_group="kasmvnc-cert"
|
||||||
|
|
||||||
|
create_kasmvnc_group() {
|
||||||
|
if ! getent group "$kasmvnc_group" >/dev/null; then
|
||||||
|
groupadd --system "$kasmvnc_group"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
make_self_signed_certificate() {
|
||||||
|
local cert_file=/etc/pki/tls/private/kasmvnc.pem
|
||||||
|
[ -f "$cert_file" ] && return 0
|
||||||
|
|
||||||
|
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
|
||||||
|
-keyout "$cert_file" \
|
||||||
|
-out "$cert_file" -subj \
|
||||||
|
"/C=US/ST=VA/L=None/O=None/OU=DoFu/CN=kasm/emailAddress=none@none.none"
|
||||||
|
chgrp "$kasmvnc_group" "$cert_file"
|
||||||
|
chmod 640 "$cert_file"
|
||||||
|
}
|
||||||
|
|
||||||
|
create_kasmvnc_group
|
||||||
|
make_self_signed_certificate
|
||||||
|
|
||||||
|
%postun
|
||||||
|
rm -f /etc/pki/tls/private/kasmvnc.pem
|
8
spec/fixtures/defaults_config.yaml
vendored
8
spec/fixtures/defaults_config.yaml
vendored
@ -4,6 +4,9 @@ desktop:
|
|||||||
height: 768
|
height: 768
|
||||||
allow_resize: true
|
allow_resize: true
|
||||||
pixel_depth: 24
|
pixel_depth: 24
|
||||||
|
gpu:
|
||||||
|
hw3d: false
|
||||||
|
drinode: /dev/dri/renderD128
|
||||||
|
|
||||||
network:
|
network:
|
||||||
protocol: http
|
protocol: http
|
||||||
@ -42,6 +45,11 @@ data_loss_prevention:
|
|||||||
keyboard:
|
keyboard:
|
||||||
enabled: true
|
enabled: true
|
||||||
rate_limit: unlimited
|
rate_limit: unlimited
|
||||||
|
watermark:
|
||||||
|
# image: /etc/kasmvnc/picture.png
|
||||||
|
# location: 10,10
|
||||||
|
# tint: 255,20,20,128
|
||||||
|
# repeat_spacing: 10
|
||||||
logging:
|
logging:
|
||||||
level: off
|
level: off
|
||||||
|
|
||||||
|
@ -8,6 +8,8 @@ use Data::Dumper;
|
|||||||
use Hash::Merge::Simple;
|
use Hash::Merge::Simple;
|
||||||
use KasmVNC::Utils;
|
use KasmVNC::Utils;
|
||||||
|
|
||||||
|
our $logger;
|
||||||
|
|
||||||
sub merge {
|
sub merge {
|
||||||
my @configsToMerge = map { $_->{data} } @_;
|
my @configsToMerge = map { $_->{data} } @_;
|
||||||
my $mergedConfig = Hash::Merge::Simple::merge(@configsToMerge) // {};
|
my $mergedConfig = Hash::Merge::Simple::merge(@configsToMerge) // {};
|
||||||
@ -31,7 +33,13 @@ sub load {
|
|||||||
|
|
||||||
failIfConfigNotReadable($self->{filename});
|
failIfConfigNotReadable($self->{filename});
|
||||||
|
|
||||||
$self->{data} = YAML::Tiny->read($self->{filename})->[0];
|
$logger->debug("Loading config " . $self->{filename});
|
||||||
|
my $yamlDocuments = YAML::Tiny->read($self->{filename});
|
||||||
|
unless (defined $yamlDocuments) {
|
||||||
|
die "Couldn't load config: $self->{filename}. Probable reason: No newline at end of file\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$self->{data} = $yamlDocuments->[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
sub get {
|
sub get {
|
||||||
|
@ -8,9 +8,18 @@ use Data::Dumper;
|
|||||||
sub new {
|
sub new {
|
||||||
my ($class, $args) = @_;
|
my ($class, $args) = @_;
|
||||||
my $self = bless {
|
my $self = bless {
|
||||||
|
level => $args->{level} // "warn"
|
||||||
}, $class;
|
}, $class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub debug {
|
||||||
|
my $self = shift;
|
||||||
|
|
||||||
|
return unless ($self->{level} eq "debug");
|
||||||
|
|
||||||
|
say { *STDERR } @_;
|
||||||
|
}
|
||||||
|
|
||||||
sub warn {
|
sub warn {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
@ -5,6 +5,9 @@ desktop:
|
|||||||
height: 768
|
height: 768
|
||||||
allow_resize: true
|
allow_resize: true
|
||||||
pixel_depth: 24
|
pixel_depth: 24
|
||||||
|
gpu:
|
||||||
|
hw3d: false
|
||||||
|
drinode: /dev/dri/renderD128
|
||||||
|
|
||||||
network:
|
network:
|
||||||
protocol: http
|
protocol: http
|
||||||
@ -84,9 +87,13 @@ data_loss_prevention:
|
|||||||
keyboard:
|
keyboard:
|
||||||
enabled: true
|
enabled: true
|
||||||
rate_limit: unlimited
|
rate_limit: unlimited
|
||||||
# "verbose" SETTING LOGS YOUR PRIVATE INFORMATION. Keypresses and clipboard
|
watermark:
|
||||||
# content.
|
# image: /etc/kasmvnc/picture.png
|
||||||
|
# location: 10,10
|
||||||
|
# tint: 255,20,20,128
|
||||||
|
# repeat_spacing: 10
|
||||||
logging:
|
logging:
|
||||||
|
# "verbose" SETTING LOGS YOUR PRIVATE INFORMATION. Keypresses and clipboard content
|
||||||
level: off
|
level: off
|
||||||
|
|
||||||
encoding:
|
encoding:
|
||||||
|
@ -1171,6 +1171,7 @@ sub DefineFilePathsAndStuff {
|
|||||||
|
|
||||||
$KasmVNC::Users::vncPasswdBin = $exedir . "kasmvncpasswd";
|
$KasmVNC::Users::vncPasswdBin = $exedir . "kasmvncpasswd";
|
||||||
$KasmVNC::Users::logger = $logger;
|
$KasmVNC::Users::logger = $logger;
|
||||||
|
$KasmVNC::Config::logger = $logger;
|
||||||
|
|
||||||
$vncSystemConfigDir = "/etc/kasmvnc";
|
$vncSystemConfigDir = "/etc/kasmvnc";
|
||||||
if ($ENV{KASMVNC_DEVELOPMENT}) {
|
if ($ENV{KASMVNC_DEVELOPMENT}) {
|
||||||
@ -1720,6 +1721,50 @@ sub DefineConfigToCLIConversion {
|
|||||||
$value;
|
$value;
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
KasmVNC::CliOption->new({
|
||||||
|
name => 'DLP_WatermarkImage',
|
||||||
|
configKeys => [
|
||||||
|
KasmVNC::ConfigKey->new({
|
||||||
|
name => "data_loss_prevention.watermark.image",
|
||||||
|
type => KasmVNC::ConfigKey::ANY
|
||||||
|
})
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
KasmVNC::CliOption->new({
|
||||||
|
name => 'DLP_WatermarkLocation',
|
||||||
|
configKeys => [
|
||||||
|
KasmVNC::ConfigKey->new({
|
||||||
|
name => "data_loss_prevention.watermark.location",
|
||||||
|
type => KasmVNC::ConfigKey::ANY,
|
||||||
|
validator => KasmVNC::PatternValidator->new({
|
||||||
|
pattern => qr/^\d+,\d+$/,
|
||||||
|
errorMessage => "Must be an x and y offset separated by a comma: 10,10"
|
||||||
|
})
|
||||||
|
})
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
KasmVNC::CliOption->new({
|
||||||
|
name => 'DLP_WatermarkTint',
|
||||||
|
configKeys => [
|
||||||
|
KasmVNC::ConfigKey->new({
|
||||||
|
name => "data_loss_prevention.watermark.tint",
|
||||||
|
type => KasmVNC::ConfigKey::ANY,
|
||||||
|
validator => KasmVNC::PatternValidator->new({
|
||||||
|
pattern => qr/^\d{1,3},\d{1,3},\d{1,3},\d{1,3}$/,
|
||||||
|
errorMessage => "Must be RBGA formatted: 255,255,255,128"
|
||||||
|
})
|
||||||
|
})
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
KasmVNC::CliOption->new({
|
||||||
|
name => 'DLP_WatermarkRepeatSpace',
|
||||||
|
configKeys => [
|
||||||
|
KasmVNC::ConfigKey->new({
|
||||||
|
name => "data_loss_prevention.watermark.repeat_spacing",
|
||||||
|
type => KasmVNC::ConfigKey::INT
|
||||||
|
})
|
||||||
|
]
|
||||||
|
}),
|
||||||
KasmVNC::CliOption->new({
|
KasmVNC::CliOption->new({
|
||||||
name => 'DLP_Log',
|
name => 'DLP_Log',
|
||||||
configKeys => [
|
configKeys => [
|
||||||
@ -2242,6 +2287,39 @@ sub DefineConfigToCLIConversion {
|
|||||||
isPresent($value) && $value ne 'auto';
|
isPresent($value) && $value ne 'auto';
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
KasmVNC::CliOption->new({
|
||||||
|
name => 'hw3d',
|
||||||
|
configKeys => [
|
||||||
|
KasmVNC::ConfigKey->new({
|
||||||
|
name => "desktop.gpu.hw3d",
|
||||||
|
type => KasmVNC::ConfigKey::BOOLEAN
|
||||||
|
})
|
||||||
|
],
|
||||||
|
toStringSub => sub {
|
||||||
|
$self = shift;
|
||||||
|
my $value = $self->configValue();
|
||||||
|
|
||||||
|
switch($value) {
|
||||||
|
case 'true' {
|
||||||
|
$valuesStr = '-hw3d ';
|
||||||
|
}
|
||||||
|
case 'false' {
|
||||||
|
$valuesStr = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $valuesStr;
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
KasmVNC::CliOption->new({
|
||||||
|
name => 'drinode',
|
||||||
|
configKeys => [
|
||||||
|
KasmVNC::ConfigKey->new({
|
||||||
|
name => "desktop.gpu.drinode",
|
||||||
|
type => KasmVNC::ConfigKey::ANY
|
||||||
|
})
|
||||||
|
]
|
||||||
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
%cliArgMap = map { ("-" . $_->{name}) => $_ } @xvncOptions;
|
%cliArgMap = map { ("-" . $_->{name}) => $_ } @xvncOptions;
|
||||||
@ -2754,5 +2832,6 @@ sub SetAppSettingsFromConfigAndCli {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub InitLogger {
|
sub InitLogger {
|
||||||
$logger = KasmVNC::Logger->new();
|
my $debugEnabled = any { $_ eq "-debug" } @ARGV;
|
||||||
|
$logger = KasmVNC::Logger->new({ level => $debugEnabled ? "debug" : "warn" });
|
||||||
}
|
}
|
||||||
|
4
unix/xserver/.gitignore
vendored
Normal file
4
unix/xserver/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*
|
||||||
|
!/hw
|
||||||
|
/hw/*
|
||||||
|
!/hw/vnc
|
@ -30,10 +30,14 @@ bin_PROGRAMS = Xvnc
|
|||||||
|
|
||||||
man1_MANS = Xvnc.man
|
man1_MANS = Xvnc.man
|
||||||
|
|
||||||
Xvnc_SOURCES = xvnc.c \
|
Xvnc_SOURCES = xvnc.c dri3.c \
|
||||||
$(top_srcdir)/Xi/stubs.c $(top_srcdir)/mi/miinitext.c \
|
$(top_srcdir)/Xi/stubs.c $(top_srcdir)/mi/miinitext.c \
|
||||||
$(top_srcdir)/fb/fbcmap_mi.c buildtime.c
|
$(top_srcdir)/fb/fbcmap_mi.c buildtime.c
|
||||||
|
|
||||||
|
if DRI3
|
||||||
|
XVNC_SYS_LIBS += -lgbm
|
||||||
|
endif
|
||||||
|
|
||||||
# Xvnc contains no C++ sources so automake doesn't understand that we
|
# Xvnc contains no C++ sources so automake doesn't understand that we
|
||||||
# need to use the C++ compiler to link things. This is the upstream
|
# need to use the C++ compiler to link things. This is the upstream
|
||||||
# recommendation for coaxing automake.
|
# recommendation for coaxing automake.
|
||||||
@ -44,7 +48,8 @@ Xvnc_CPPFLAGS = $(XVNC_CPPFLAGS) -DKASMVNC -DNO_MODULE_EXTS \
|
|||||||
-DXVNCEXTRAVERSION="\".$(KASMVNC_COMMIT_ID)\"" \
|
-DXVNCEXTRAVERSION="\".$(KASMVNC_COMMIT_ID)\"" \
|
||||||
-DXFree86Server -DVENDOR_RELEASE="$(VENDOR_RELEASE)" \
|
-DXFree86Server -DVENDOR_RELEASE="$(VENDOR_RELEASE)" \
|
||||||
-DVENDOR_STRING="\"$(VENDOR_STRING)\"" -I$(KASMVNC_SRCDIR)/common -I$(KASMVNC_SRCDIR)/unix/common \
|
-DVENDOR_STRING="\"$(VENDOR_STRING)\"" -I$(KASMVNC_SRCDIR)/common -I$(KASMVNC_SRCDIR)/unix/common \
|
||||||
-I$(top_srcdir)/include ${XSERVERLIBS_CFLAGS} -I$(includedir)
|
-I$(top_srcdir)/include ${XSERVERLIBS_CFLAGS} -I$(includedir) \
|
||||||
|
-I$(top_srcdir)/dri3 @LIBDRM_CFLAGS@
|
||||||
|
|
||||||
Xvnc_LDADD = $(XVNC_LIBS) libvnccommon.la $(COMMON_LIBS) \
|
Xvnc_LDADD = $(XVNC_LIBS) libvnccommon.la $(COMMON_LIBS) \
|
||||||
$(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XVNC_SYS_LIBS) -lX11 -lwebp -lssl -lcrypto -lcrypt
|
$(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XVNC_SYS_LIBS) -lX11 -lwebp -lssl -lcrypto -lcrypt
|
||||||
|
@ -286,6 +286,15 @@ be either \fB0\fP (off), \fB1\fP (always) or \fB2\fP (auto). Default is
|
|||||||
\fB2\fP.
|
\fB2\fP.
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
|
.B \-hw3d
|
||||||
|
Enable hardware 3d acceleration. Default is software (llvmpipe usually).
|
||||||
|
.
|
||||||
|
.TP
|
||||||
|
.B \-drinode \fIpath\fP
|
||||||
|
Use another path instead of /dev/dri/renderD128. You may need this if you have
|
||||||
|
more than one GPU.
|
||||||
|
.
|
||||||
|
.TP
|
||||||
.B \-ZlibLevel \fIlevel\fP
|
.B \-ZlibLevel \fIlevel\fP
|
||||||
Zlib compression level for ZRLE encoding (it does not affect Tight encoding).
|
Zlib compression level for ZRLE encoding (it does not affect Tight encoding).
|
||||||
Acceptable values are between 0 and 9. Default is to use the standard
|
Acceptable values are between 0 and 9. Default is to use the standard
|
||||||
@ -346,6 +355,28 @@ Log clipboard and keyboard actions. Info logs just clipboard direction and size,
|
|||||||
verbose adds the contents for both.
|
verbose adds the contents for both.
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
|
.B \-DLP_WatermarkImage \fIpath/to/file.png\fP
|
||||||
|
Add a watermark. The PNG file should be greyscale, black is treated as transparent
|
||||||
|
and white as opaque.
|
||||||
|
.
|
||||||
|
.TP
|
||||||
|
.B \-DLP_WatermarkLocation \fIx,y\fP
|
||||||
|
Place the watermark at this position from the corner. Positive numbers are from top-left,
|
||||||
|
negative from bottom-right. Negative numbers count from the bottom-right edge of the image.
|
||||||
|
If not set, the watermark will be centered. Cannot be used together with repeat.
|
||||||
|
.
|
||||||
|
.TP
|
||||||
|
.B \-DLP_WatermarkRepeatSpace \fInum\fP
|
||||||
|
If set, repeat the watermark over the entire image, with \fBnum\fP pixels between
|
||||||
|
repetitions. Cannot be used together with location.
|
||||||
|
.
|
||||||
|
.TP
|
||||||
|
.B \-DLP_WatermarkTint \fIr,g,b,a\fP
|
||||||
|
Tint the greyscale watermark by this color. Default is 255,255,255,255 - full white.
|
||||||
|
The color components can be used to colorize the greyscale watermark, and the alpha
|
||||||
|
can be used to make it fainter.
|
||||||
|
.
|
||||||
|
.TP
|
||||||
.B \-selfBench
|
.B \-selfBench
|
||||||
Run a set of self-benchmarks and exit.
|
Run a set of self-benchmarks and exit.
|
||||||
.
|
.
|
||||||
|
279
unix/xserver/hw/vnc/dri3.c
Normal file
279
unix/xserver/hw/vnc/dri3.c
Normal file
@ -0,0 +1,279 @@
|
|||||||
|
/* Copyright (c) 2023 Kasm
|
||||||
|
*
|
||||||
|
* This is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_DIX_CONFIG_H
|
||||||
|
#include <dix-config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DRI3
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
#include <X11/X.h>
|
||||||
|
#include <X11/Xmd.h>
|
||||||
|
#include <dri3.h>
|
||||||
|
#include <drm_fourcc.h>
|
||||||
|
#include <fb.h>
|
||||||
|
#include <gcstruct.h>
|
||||||
|
#include <gbm.h>
|
||||||
|
|
||||||
|
extern const char *driNode;
|
||||||
|
|
||||||
|
static struct priv_t {
|
||||||
|
struct gbm_device *gbm;
|
||||||
|
int fd;
|
||||||
|
} priv;
|
||||||
|
|
||||||
|
struct gbm_pixmap {
|
||||||
|
struct gbm_bo *bo;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct gbm_pixmap gbm_pixmap;
|
||||||
|
|
||||||
|
static DevPrivateKeyRec dri3_pixmap_private_key;
|
||||||
|
static struct timeval start;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
xvnc_dri3_open_client(ClientPtr client,
|
||||||
|
ScreenPtr screen,
|
||||||
|
RRProviderPtr provider,
|
||||||
|
int *pfd)
|
||||||
|
{
|
||||||
|
int fd = open(driNode, O_RDWR | O_CLOEXEC);
|
||||||
|
if (fd < 0)
|
||||||
|
return BadAlloc;
|
||||||
|
*pfd = fd;
|
||||||
|
return Success;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint32_t
|
||||||
|
gbm_format_for_depth(CARD8 depth)
|
||||||
|
{
|
||||||
|
switch (depth) {
|
||||||
|
case 16:
|
||||||
|
return GBM_FORMAT_RGB565;
|
||||||
|
case 24:
|
||||||
|
return GBM_FORMAT_XRGB8888;
|
||||||
|
case 30:
|
||||||
|
return GBM_FORMAT_ARGB2101010;
|
||||||
|
default:
|
||||||
|
ErrorF("unexpected depth: %d\n", depth);
|
||||||
|
/* fallthrough */
|
||||||
|
case 32:
|
||||||
|
return GBM_FORMAT_ARGB8888;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dri3_pixmap_set_private(PixmapPtr pixmap, gbm_pixmap *gp)
|
||||||
|
{
|
||||||
|
dixSetPrivate(&pixmap->devPrivates, &dri3_pixmap_private_key, gp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gbm_pixmap *gbm_pixmap_get(PixmapPtr pixmap)
|
||||||
|
{
|
||||||
|
return dixLookupPrivate(&pixmap->devPrivates, &dri3_pixmap_private_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
static PixmapPtr
|
||||||
|
create_pixmap_for_bo(ScreenPtr screen, struct gbm_bo *bo, CARD8 depth)
|
||||||
|
{
|
||||||
|
PixmapPtr pixmap;
|
||||||
|
|
||||||
|
gbm_pixmap *gp = calloc(1, sizeof(gbm_pixmap));
|
||||||
|
if (!gp)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
pixmap = screen->CreatePixmap(screen, gbm_bo_get_width(bo), gbm_bo_get_height(bo),
|
||||||
|
depth, CREATE_PIXMAP_USAGE_SCRATCH);
|
||||||
|
if (!pixmap)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
gp->bo = bo;
|
||||||
|
dri3_pixmap_set_private(pixmap, gp);
|
||||||
|
|
||||||
|
return pixmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PixmapPtr
|
||||||
|
xvnc_pixmap_from_fds(ScreenPtr screen, CARD8 num_fds, const int *fds,
|
||||||
|
CARD16 width, CARD16 height,
|
||||||
|
const CARD32 *strides, const CARD32 *offsets,
|
||||||
|
CARD8 depth, CARD8 bpp, uint64_t modifier)
|
||||||
|
{
|
||||||
|
struct gbm_bo *bo = NULL;
|
||||||
|
PixmapPtr pixmap;
|
||||||
|
|
||||||
|
if (width == 0 || height == 0 || num_fds == 0 ||
|
||||||
|
depth < 15 || bpp != BitsPerPixel(depth) ||
|
||||||
|
strides[0] < width * bpp / 8)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (num_fds == 1) {
|
||||||
|
struct gbm_import_fd_data data;
|
||||||
|
|
||||||
|
data.fd = fds[0];
|
||||||
|
data.width = width;
|
||||||
|
data.height = height;
|
||||||
|
data.stride = strides[0];
|
||||||
|
data.format = gbm_format_for_depth(depth);
|
||||||
|
bo = gbm_bo_import(priv.gbm, GBM_BO_IMPORT_FD, &data,
|
||||||
|
GBM_BO_USE_RENDERING);
|
||||||
|
if (!bo)
|
||||||
|
return NULL;
|
||||||
|
} else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
pixmap = create_pixmap_for_bo(screen, bo, depth);
|
||||||
|
if (pixmap == NULL) {
|
||||||
|
gbm_bo_destroy(bo);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pixmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
xvnc_fds_from_pixmap(ScreenPtr screen, PixmapPtr pixmap, int *fds,
|
||||||
|
uint32_t *strides, uint32_t *offsets,
|
||||||
|
uint64_t *modifier)
|
||||||
|
{
|
||||||
|
gbm_pixmap *gp = gbm_pixmap_get(pixmap);
|
||||||
|
if (!gp)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
fds[0] = gbm_bo_get_fd(gp->bo);
|
||||||
|
strides[0] = gbm_bo_get_stride(gp->bo);
|
||||||
|
offsets[0] = 0;
|
||||||
|
*modifier = DRM_FORMAT_MOD_INVALID;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
xvnc_get_formats(ScreenPtr screen,
|
||||||
|
CARD32 *num_formats, CARD32 **formats)
|
||||||
|
{
|
||||||
|
ErrorF("xvnc_get_formats\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
xvnc_get_modifiers(ScreenPtr screen, uint32_t format,
|
||||||
|
uint32_t *num_modifiers, uint64_t **modifiers)
|
||||||
|
{
|
||||||
|
ErrorF("xvnc_get_modifiers\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
xvnc_get_drawable_modifiers(DrawablePtr draw, uint32_t format,
|
||||||
|
uint32_t *num_modifiers, uint64_t **modifiers)
|
||||||
|
{
|
||||||
|
ErrorF("xvnc_get_drawable_modifiers\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const dri3_screen_info_rec xvnc_dri3_info = {
|
||||||
|
.version = 2,
|
||||||
|
.open = NULL,
|
||||||
|
.pixmap_from_fds = xvnc_pixmap_from_fds,
|
||||||
|
.fds_from_pixmap = xvnc_fds_from_pixmap,
|
||||||
|
.open_client = xvnc_dri3_open_client,
|
||||||
|
.get_formats = xvnc_get_formats,
|
||||||
|
.get_modifiers = xvnc_get_modifiers,
|
||||||
|
.get_drawable_modifiers = xvnc_get_drawable_modifiers,
|
||||||
|
};
|
||||||
|
|
||||||
|
void xvnc_sync_dri3_pixmap(PixmapPtr pixmap)
|
||||||
|
{
|
||||||
|
// There doesn't seem to be a good hook or sync point, so we do it manually
|
||||||
|
// here, right before Present copies from the pixmap
|
||||||
|
DrawablePtr pDraw;
|
||||||
|
GCPtr gc;
|
||||||
|
void *ptr;
|
||||||
|
uint32_t stride, w, h;
|
||||||
|
void *opaque = NULL;
|
||||||
|
|
||||||
|
// We may not be running on hw if there's a compositor using PRESENT on llvmpipe
|
||||||
|
if (!driNode)
|
||||||
|
return;
|
||||||
|
|
||||||
|
gbm_pixmap *gp = gbm_pixmap_get(pixmap);
|
||||||
|
if (!gp) {
|
||||||
|
//ErrorF("Present tried to copy from a non-dri3 pixmap\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
w = gbm_bo_get_width(gp->bo);
|
||||||
|
h = gbm_bo_get_height(gp->bo);
|
||||||
|
|
||||||
|
ptr = gbm_bo_map(gp->bo, 0, 0, w, h,
|
||||||
|
GBM_BO_TRANSFER_READ, &stride, &opaque);
|
||||||
|
if (!ptr) {
|
||||||
|
ErrorF("gbm map failed, errno %d\n", errno);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pDraw = &pixmap->drawable;
|
||||||
|
if ((gc = GetScratchGC(pDraw->depth, pDraw->pScreen))) {
|
||||||
|
ValidateGC(pDraw, gc);
|
||||||
|
//gc->ops->PutImage(pDraw, gc, pDraw->depth, 0, 0, w, h, 0, ZPixmap, data);
|
||||||
|
fbPutZImage(pDraw, fbGetCompositeClip(gc), gc->alu, fbGetGCPrivate(gc)->pm,
|
||||||
|
0, 0, w, h, ptr, stride / sizeof(FbStip));
|
||||||
|
FreeScratchGC(gc);
|
||||||
|
}
|
||||||
|
|
||||||
|
gbm_bo_unmap(gp->bo, opaque);
|
||||||
|
}
|
||||||
|
|
||||||
|
void xvnc_init_dri3(void)
|
||||||
|
{
|
||||||
|
memset(&priv, 0, sizeof(priv));
|
||||||
|
|
||||||
|
gettimeofday(&start, NULL);
|
||||||
|
|
||||||
|
if (!dixRegisterPrivateKey(&dri3_pixmap_private_key, PRIVATE_PIXMAP, 0))
|
||||||
|
FatalError("dix\n");
|
||||||
|
|
||||||
|
if (!driNode)
|
||||||
|
driNode = "/dev/dri/renderD128";
|
||||||
|
|
||||||
|
priv.fd = open(driNode, O_RDWR | O_CLOEXEC);
|
||||||
|
if (!priv.fd)
|
||||||
|
FatalError("Failed to open %s\n", driNode);
|
||||||
|
|
||||||
|
priv.gbm = gbm_create_device(priv.fd);
|
||||||
|
if (!priv.gbm)
|
||||||
|
FatalError("Failed to create gbm\n");
|
||||||
|
|
||||||
|
if (!dri3_screen_init(screenInfo.screens[0], &xvnc_dri3_info))
|
||||||
|
FatalError("Couldn't init dri3\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // DRI3
|
@ -37,6 +37,7 @@
|
|||||||
#include <rfb/Hostname.h>
|
#include <rfb/Hostname.h>
|
||||||
#include <rfb/Region.h>
|
#include <rfb/Region.h>
|
||||||
#include <rfb/ledStates.h>
|
#include <rfb/ledStates.h>
|
||||||
|
#include <rfb/Watermark.h>
|
||||||
#include <network/iceip.h>
|
#include <network/iceip.h>
|
||||||
#include <network/TcpSocket.h>
|
#include <network/TcpSocket.h>
|
||||||
#include <network/UnixSocket.h>
|
#include <network/UnixSocket.h>
|
||||||
@ -232,6 +233,9 @@ void vncExtensionInit(void)
|
|||||||
dummyY < 16)
|
dummyY < 16)
|
||||||
vncFatalError("Invalid value to %s", Server::maxVideoResolution.getName());
|
vncFatalError("Invalid value to %s", Server::maxVideoResolution.getName());
|
||||||
|
|
||||||
|
if (!watermarkInit())
|
||||||
|
vncFatalError("Invalid watermark params");
|
||||||
|
|
||||||
pipe(wakeuppipe);
|
pipe(wakeuppipe);
|
||||||
const int flags = fcntl(wakeuppipe[0], F_GETFL, 0);
|
const int flags = fcntl(wakeuppipe[0], F_GETFL, 0);
|
||||||
fcntl(wakeuppipe[0], F_SETFL, flags | O_NONBLOCK);
|
fcntl(wakeuppipe[0], F_SETFL, flags | O_NONBLOCK);
|
||||||
|
@ -51,7 +51,7 @@ struct dlp_mimetype_t {
|
|||||||
char mime[32];
|
char mime[32];
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned dlp_num_mimetypes();
|
unsigned dlp_num_mimetypes(void);
|
||||||
const char *dlp_get_mimetype(const unsigned i);
|
const char *dlp_get_mimetype(const unsigned i);
|
||||||
|
|
||||||
extern int vncInetdSock;
|
extern int vncInetdSock;
|
||||||
@ -70,7 +70,7 @@ int vncGetSendPrimary(void);
|
|||||||
void vncUpdateDesktopName(void);
|
void vncUpdateDesktopName(void);
|
||||||
|
|
||||||
void vncAnnounceClipboard(int available);
|
void vncAnnounceClipboard(int available);
|
||||||
void vncClearBinaryClipboardData();
|
void vncClearBinaryClipboardData(void);
|
||||||
void vncSendBinaryClipboardData(const char* mime, const unsigned char *data,
|
void vncSendBinaryClipboardData(const char* mime, const unsigned char *data,
|
||||||
const unsigned len);
|
const unsigned len);
|
||||||
void vncGetBinaryClipboardData(const char *mime, const unsigned char **ptr,
|
void vncGetBinaryClipboardData(const char *mime, const unsigned char **ptr,
|
||||||
|
@ -75,6 +75,12 @@ from the X Consortium.
|
|||||||
#include <sys/ipc.h>
|
#include <sys/ipc.h>
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
#endif /* HAS_SHM */
|
#endif /* HAS_SHM */
|
||||||
|
#ifdef MITSHM
|
||||||
|
#include "shmint.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_XSHMFENCE
|
||||||
|
#include <misyncshm.h>
|
||||||
|
#endif
|
||||||
#include "dix.h"
|
#include "dix.h"
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
#include "miline.h"
|
#include "miline.h"
|
||||||
@ -90,7 +96,7 @@ from the X Consortium.
|
|||||||
#include "version-config.h"
|
#include "version-config.h"
|
||||||
#include "site.h"
|
#include "site.h"
|
||||||
|
|
||||||
#define XVNCVERSION "KasmVNC 0.9"
|
#define XVNCVERSION "KasmVNC 1.1.0"
|
||||||
#define XVNCCOPYRIGHT ("Copyright (C) 1999-2018 KasmVNC Team and many others (see README.me)\n" \
|
#define XVNCCOPYRIGHT ("Copyright (C) 1999-2018 KasmVNC Team and many others (see README.me)\n" \
|
||||||
"See http://kasmweb.com for information on KasmVNC.\n")
|
"See http://kasmweb.com for information on KasmVNC.\n")
|
||||||
|
|
||||||
@ -152,6 +158,8 @@ typedef enum { NORMAL_MEMORY_FB, SHARED_MEMORY_FB } fbMemType;
|
|||||||
static fbMemType fbmemtype = NORMAL_MEMORY_FB;
|
static fbMemType fbmemtype = NORMAL_MEMORY_FB;
|
||||||
static int lastScreen = -1;
|
static int lastScreen = -1;
|
||||||
static Bool Render = TRUE;
|
static Bool Render = TRUE;
|
||||||
|
static Bool hw3d = FALSE;
|
||||||
|
const char *driNode = NULL;
|
||||||
|
|
||||||
static Bool displaySpecified = FALSE;
|
static Bool displaySpecified = FALSE;
|
||||||
static char displayNumStr[16];
|
static char displayNumStr[16];
|
||||||
@ -420,6 +428,8 @@ void ddxUseMsg(void)
|
|||||||
ErrorF("+/-render turn on/off RENDER extension support"
|
ErrorF("+/-render turn on/off RENDER extension support"
|
||||||
"(default on)\n");
|
"(default on)\n");
|
||||||
#endif
|
#endif
|
||||||
|
ErrorF("-hw3d enable hardware 3d acceleration\n");
|
||||||
|
ErrorF("-drinode path use another card than /dev/dri/renderD128\n");
|
||||||
ErrorF("-linebias n adjust thin line pixelization\n");
|
ErrorF("-linebias n adjust thin line pixelization\n");
|
||||||
ErrorF("-blackpixel n pixel value for black\n");
|
ErrorF("-blackpixel n pixel value for black\n");
|
||||||
ErrorF("-whitepixel n pixel value for white\n");
|
ErrorF("-whitepixel n pixel value for white\n");
|
||||||
@ -560,6 +570,20 @@ ddxProcessArgument(int argc, char *argv[], int i)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (strcmp (argv[i], "-hw3d") == 0)
|
||||||
|
{
|
||||||
|
hw3d = TRUE;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp (argv[i], "-drinode") == 0)
|
||||||
|
{
|
||||||
|
fail_unless_args(argc, i, 1);
|
||||||
|
++i;
|
||||||
|
driNode = argv[i];
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
if (strcmp (argv[i], "-blackpixel") == 0) /* -blackpixel n */
|
if (strcmp (argv[i], "-blackpixel") == 0) /* -blackpixel n */
|
||||||
{
|
{
|
||||||
Pixel pix;
|
Pixel pix;
|
||||||
@ -1563,7 +1587,7 @@ int vncRandRCreateScreenOutputs(int scrIdx, int extraOutputs)
|
|||||||
|
|
||||||
/* Creating and modifying modes, used by XserverDesktop and init here */
|
/* Creating and modifying modes, used by XserverDesktop and init here */
|
||||||
|
|
||||||
int vncRandRCanCreateModes()
|
int vncRandRCanCreateModes(void)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -1772,6 +1796,15 @@ vfbScreenInit(ScreenPtr pScreen, int argc, char **argv)
|
|||||||
ret = fbPictureInit (pScreen, 0, 0);
|
ret = fbPictureInit (pScreen, 0, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MITSHM
|
||||||
|
ShmRegisterFbFuncs(pScreen);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_XSHMFENCE
|
||||||
|
if (!miSyncShmScreenInit(pScreen))
|
||||||
|
return FALSE;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!ret) return FALSE;
|
if (!ret) return FALSE;
|
||||||
|
|
||||||
#if XORG < 110
|
#if XORG < 110
|
||||||
@ -1872,7 +1905,7 @@ static void vfbClientStateChange(CallbackListPtr *a, void *b, void *c) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if XORG >= 113
|
#if XORG >= 113 && XORG < 120
|
||||||
#ifdef GLXEXT
|
#ifdef GLXEXT
|
||||||
extern void GlxExtensionInit(void);
|
extern void GlxExtensionInit(void);
|
||||||
|
|
||||||
@ -1884,6 +1917,10 @@ static ExtensionModule glxExt = {
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef DRI3
|
||||||
|
extern void xvnc_init_dri3(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
InitOutput(ScreenInfo *scrInfo, int argc, char **argv)
|
InitOutput(ScreenInfo *scrInfo, int argc, char **argv)
|
||||||
{
|
{
|
||||||
@ -1960,6 +1997,14 @@ InitOutput(ScreenInfo *scrInfo, int argc, char **argv)
|
|||||||
if (!AddCallback(&ClientStateCallback, vfbClientStateChange, 0)) {
|
if (!AddCallback(&ClientStateCallback, vfbClientStateChange, 0)) {
|
||||||
FatalError("AddCallback failed\n");
|
FatalError("AddCallback failed\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hw3d) {
|
||||||
|
#ifdef DRI3
|
||||||
|
xvnc_init_dri3();
|
||||||
|
#else
|
||||||
|
FatalError("DRI3 disabled at compile time\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
} /* end InitOutput */
|
} /* end InitOutput */
|
||||||
|
|
||||||
/* this is just to get the server to link on AIX */
|
/* this is just to get the server to link on AIX */
|
||||||
|
@ -80,3 +80,34 @@ Index: xserver/mi/miinitext.c
|
|||||||
{GEExtensionInit, "Generic Event Extension", &noGEExtension},
|
{GEExtensionInit, "Generic Event Extension", &noGEExtension},
|
||||||
{ShapeExtensionInit, "SHAPE", NULL},
|
{ShapeExtensionInit, "SHAPE", NULL},
|
||||||
#ifdef MITSHM
|
#ifdef MITSHM
|
||||||
|
--- xserver.orig/dri3/Makefile.am 2019-02-26 21:28:50.000000000 +0200
|
||||||
|
+++ xserver/dri3/Makefile.am 2023-01-18 11:55:45.315851638 +0200
|
||||||
|
@@ -1,7 +1,7 @@
|
||||||
|
noinst_LTLIBRARIES = libdri3.la
|
||||||
|
AM_CFLAGS = \
|
||||||
|
-DHAVE_XORG_CONFIG_H \
|
||||||
|
- @DIX_CFLAGS@ @XORG_CFLAGS@
|
||||||
|
+ @DIX_CFLAGS@ @XORG_CFLAGS@ @LIBDRM_CFLAGS@
|
||||||
|
|
||||||
|
libdri3_la_SOURCES = \
|
||||||
|
dri3.h \
|
||||||
|
--- xserver.orig/present/present.c 2019-02-26 21:28:50.000000000 +0200
|
||||||
|
+++ xserver/present/present.c 2023-01-20 11:32:27.175493594 +0200
|
||||||
|
@@ -27,6 +27,8 @@
|
||||||
|
#include "present_priv.h"
|
||||||
|
#include <gcstruct.h>
|
||||||
|
|
||||||
|
+void xvnc_sync_dri3_pixmap(PixmapPtr pixmap);
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Returns:
|
||||||
|
* TRUE if the first MSC value is equal to or after the second one
|
||||||
|
@@ -79,6 +81,8 @@
|
||||||
|
ScreenPtr screen = drawable->pScreen;
|
||||||
|
GCPtr gc;
|
||||||
|
|
||||||
|
+ xvnc_sync_dri3_pixmap(pixmap);
|
||||||
|
+
|
||||||
|
gc = GetScratchGC(drawable->depth, screen);
|
||||||
|
if (update) {
|
||||||
|
ChangeGCVal changes[2];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user