import tigervnc-1.10.1-5.el8
This commit is contained in:
parent
96eb36ba55
commit
af2990528c
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
||||
SOURCES/tigervnc-1.9.0.tar.gz
|
||||
SOURCES/tigervnc-1.10.1.tar.gz
|
||||
|
@ -1 +1 @@
|
||||
c56656c596fb863bb2c4b67fb62b4165011d181f SOURCES/tigervnc-1.9.0.tar.gz
|
||||
34efc6e2e67be672dca38c10ce064bcb08adee9f SOURCES/tigervnc-1.10.1.tar.gz
|
||||
|
@ -0,0 +1,34 @@
|
||||
From 920d9c4d6562ecabf79497bc901d50522d4bc661 Mon Sep 17 00:00:00 2001
|
||||
From: Linus Heckemann <git@sphalerite.org>
|
||||
Date: Sat, 1 Feb 2020 11:08:26 +0100
|
||||
Subject: [PATCH] xserver: add no-op input thread init function
|
||||
|
||||
This allows Xvnc to build with xorg-server 1.20.7, which requires OS
|
||||
layers to implement a ddxInputThreadInit function when configured with
|
||||
--enable-input-thread (the default).
|
||||
|
||||
relevant xorg-server commit: e3f26605d85d987da434640f52646d728f1fe919
|
||||
---
|
||||
unix/xserver/hw/vnc/Input.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/unix/xserver/hw/vnc/Input.c b/unix/xserver/hw/vnc/Input.c
|
||||
index 534e435e..b342d4d6 100644
|
||||
--- a/unix/xserver/hw/vnc/Input.c
|
||||
+++ b/unix/xserver/hw/vnc/Input.c
|
||||
@@ -711,3 +711,12 @@ static void vncKeysymKeyboardEvent(KeySym keysym, int down)
|
||||
*/
|
||||
mieqProcessInputEvents();
|
||||
}
|
||||
+
|
||||
+#if INPUTTHREAD
|
||||
+/** This function is called in Xserver/os/inputthread.c when starting
|
||||
+ the input thread. */
|
||||
+void
|
||||
+ddxInputThreadInit(void)
|
||||
+{
|
||||
+}
|
||||
+#endif
|
||||
--
|
||||
2.24.1
|
||||
|
113
SOURCES/HOWTO.md
Normal file
113
SOURCES/HOWTO.md
Normal file
@ -0,0 +1,113 @@
|
||||
# What has changed
|
||||
The previous Tigervnc versions had a wrapper script called `vncserver` which
|
||||
could be run as a user manually to start *Xvnc* process. The usage was quite
|
||||
simple as you just run
|
||||
```
|
||||
$ vncserver :x [vncserver options] [Xvnc options]
|
||||
```
|
||||
and that was it. While this was working just fine, there were issues when users
|
||||
wanted to start a Tigervnc server using *systemd*. For these reasons things were
|
||||
completely changed and there is now a new way how this all is supposed to work.
|
||||
|
||||
# How to start Tigervnc server
|
||||
|
||||
## Add a user mapping
|
||||
With this you can map a user to a particular port. The mapping should be done in
|
||||
`/etc/tigervnc/vncserver.users` configuration file. It should be pretty
|
||||
straightforward once you open the file as there are some examples, but basically
|
||||
the mapping is in form
|
||||
```
|
||||
:x=user
|
||||
```
|
||||
For example you can have
|
||||
```
|
||||
:1=test
|
||||
:2=vncuser
|
||||
```
|
||||
|
||||
### Note:
|
||||
Make sure you don't leave a space character after the username.
|
||||
|
||||
## Configure Xvnc options
|
||||
To configure Xvnc parameters, you need to go to the same directory where you did
|
||||
the user mapping and open `vncserver-config-defaults` configuration file. This
|
||||
file is for the default Xvnc configuration and will be applied to every user
|
||||
unless any of the following applies:
|
||||
* The user has its own configuration in `$HOME/.vnc/config`
|
||||
* The same option with different value is configured in
|
||||
`vncserver-config-mandatory` configuration file, which replaces the default
|
||||
configuration and has even a higher priority than the per-user configuration.
|
||||
This option is for system administrators when they want to force particular
|
||||
*Xvnc* options.
|
||||
|
||||
Format of the configuration file is also quite simple as the configuration is
|
||||
in form of
|
||||
```
|
||||
option=value
|
||||
option
|
||||
```
|
||||
for example
|
||||
```
|
||||
session=gnome
|
||||
securitytypes=vncauth,tlsvnc
|
||||
desktop=sandbox
|
||||
geometry=2000x1200
|
||||
localhost
|
||||
alwaysshared
|
||||
```
|
||||
### Note:
|
||||
There is one important option you need to set and that option is the session you
|
||||
want to start. E.g when you want to start GNOME desktop, then you have to use
|
||||
```
|
||||
session=gnome
|
||||
```
|
||||
which should match the name of a session desktop file from `/usr/share/xsessions`
|
||||
directory.
|
||||
|
||||
## Set VNC password
|
||||
You need to set a password for each user in order to be able to start the
|
||||
Tigervnc server. In order to create a password, you just run
|
||||
```
|
||||
$ vncpasswd
|
||||
```
|
||||
as the user you will be starting the server for.
|
||||
### Note:
|
||||
If you were using Tigervnc before for your user and you already created a
|
||||
password, then you will have to make sure the `$HOME/.vnc` folder created by
|
||||
`vncpasswd` will have the correct *SELinux* context. You either can delete this
|
||||
folder and recreate it again by creating the password one more time, or
|
||||
alternatively you can run
|
||||
```
|
||||
$ restorecon -RFv /home/<USER>/.vnc
|
||||
```
|
||||
|
||||
## Start the Tigervnc server
|
||||
Finally you can start the server using systemd service. To do so just run
|
||||
```
|
||||
$ systemctl start vncserver@:x
|
||||
```
|
||||
as root or
|
||||
```
|
||||
$ sudo systemctl start vncserver@:x
|
||||
```
|
||||
as a regular user in case it has permissions to run `sudo`. Don't forget to
|
||||
replace the `:x` by the actual number you configured in the user mapping file.
|
||||
Following our example by running
|
||||
```
|
||||
$ systemctl start vncserver@:1
|
||||
```
|
||||
you will start a Tigervnc server for user `test` with a GNOME session.
|
||||
|
||||
### Note:
|
||||
If you were previously using Tigervnc and you were used to start it using
|
||||
*systemd* then you will need to remove previous *systemd* configuration files,
|
||||
those you most likely copied to `/etc/systemd/system/vncserver@.service`,
|
||||
otherwise this service file will be preferred over the new one installed with
|
||||
latest Tigervnc.
|
||||
|
||||
# Limitations
|
||||
You will not be able to start a Tigervnc server for a user who is already
|
||||
logged into a graphical session. Avoid running the server as the `root` user as
|
||||
it's not a safe thing to do. While running the server as the `root` should work
|
||||
in general, it's not recommended to do so and there might be some things which
|
||||
are not working properly.
|
@ -1,14 +0,0 @@
|
||||
diff --git a/unix/vncserver b/unix/vncserver
|
||||
index a6c890f..687ef72 100755
|
||||
--- a/unix/vncserver
|
||||
+++ b/unix/vncserver
|
||||
@@ -208,7 +208,8 @@ if ((@ARGV > 0) && ($ARGV[0] =~ /^:(\d+)$/)) {
|
||||
$displayNumber = $1;
|
||||
shift(@ARGV);
|
||||
if (!&CheckDisplayNumber($displayNumber)) {
|
||||
- die "A VNC server is already running as :$displayNumber\n";
|
||||
+ warn "A VNC server is already running as :$displayNumber\n";
|
||||
+ $displayNumber = &GetDisplayNumber();
|
||||
}
|
||||
} elsif ((@ARGV > 0) && ($ARGV[0] !~ /^-/) && ($ARGV[0] !~ /^\+/)) {
|
||||
&Usage();
|
@ -1,312 +0,0 @@
|
||||
diff --git a/common/network/TcpSocket.cxx b/common/network/TcpSocket.cxx
|
||||
index 51d77c76..9e277cbb 100644
|
||||
--- a/common/network/TcpSocket.cxx
|
||||
+++ b/common/network/TcpSocket.cxx
|
||||
@@ -736,7 +736,7 @@ char* TcpFilter::patternToStr(const TcpFilter::Pattern& p) {
|
||||
buffer + 1, sizeof (buffer) - 2, NULL, 0, NI_NUMERICHOST);
|
||||
strcat(buffer, "]");
|
||||
addr.buf = rfb::strDup(buffer);
|
||||
- } else if (p.address.u.sa.sa_family == AF_UNSPEC)
|
||||
+ } else
|
||||
addr.buf = rfb::strDup("");
|
||||
|
||||
char action;
|
||||
diff --git a/common/rfb/CSecurityTLS.cxx b/common/rfb/CSecurityTLS.cxx
|
||||
index e1a31f78..d268202b 100644
|
||||
--- a/common/rfb/CSecurityTLS.cxx
|
||||
+++ b/common/rfb/CSecurityTLS.cxx
|
||||
@@ -95,9 +95,9 @@ void CSecurityTLS::setDefaults()
|
||||
delete [] homeDir;
|
||||
|
||||
if (!fileexists(caDefault.buf))
|
||||
- X509CA.setDefaultStr(strdup(caDefault.buf));
|
||||
+ X509CA.setDefaultStr(caDefault.buf);
|
||||
if (!fileexists(crlDefault.buf))
|
||||
- X509CRL.setDefaultStr(strdup(crlDefault.buf));
|
||||
+ X509CRL.setDefaultStr(crlDefault.buf);
|
||||
}
|
||||
|
||||
void CSecurityTLS::shutdown(bool needbye)
|
||||
diff --git a/common/rfb/SSecurityPlain.cxx b/common/rfb/SSecurityPlain.cxx
|
||||
index 6d48b65c..6f72432a 100644
|
||||
--- a/common/rfb/SSecurityPlain.cxx
|
||||
+++ b/common/rfb/SSecurityPlain.cxx
|
||||
@@ -41,7 +41,7 @@ StringParameter PasswordValidator::plainUsers
|
||||
|
||||
bool PasswordValidator::validUser(const char* username)
|
||||
{
|
||||
- CharArray users(strDup(plainUsers.getValueStr())), user;
|
||||
+ CharArray users(plainUsers.getValueStr()), user;
|
||||
|
||||
while (users.buf) {
|
||||
strSplit(users.buf, ',', &user.buf, &users.buf);
|
||||
diff --git a/unix/tx/TXWindow.cxx b/unix/tx/TXWindow.cxx
|
||||
index a6819179..6129840e 100644
|
||||
--- a/unix/tx/TXWindow.cxx
|
||||
+++ b/unix/tx/TXWindow.cxx
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <list>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
+#include <vector>
|
||||
#include <rfb/util.h>
|
||||
|
||||
std::list<TXWindow*> windows;
|
||||
@@ -132,20 +133,20 @@ TXGlobalEventHandler* TXWindow::setGlobalEventHandler(TXGlobalEventHandler* h)
|
||||
|
||||
void TXWindow::getColours(Display* dpy, XColor* cols, int nCols)
|
||||
{
|
||||
- bool* got = new bool[nCols];
|
||||
+ std::vector<bool> got;
|
||||
+
|
||||
bool failed = false;
|
||||
int i;
|
||||
for (i = 0; i < nCols; i++) {
|
||||
if (XAllocColor(dpy, cmap, &cols[i])) {
|
||||
- got[i] = true;
|
||||
+ got.push_back(true);
|
||||
} else {
|
||||
- got[i] = false;
|
||||
+ got.push_back(false);
|
||||
failed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!failed) {
|
||||
- delete [] got;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -168,12 +169,13 @@ void TXWindow::getColours(Display* dpy, XColor* cols, int nCols)
|
||||
int cmapSize = DisplayCells(dpy,DefaultScreen(dpy));
|
||||
|
||||
XColor* cm = new XColor[cmapSize];
|
||||
- bool* shared = new bool[cmapSize];
|
||||
- bool* usedAsNearest = new bool[cmapSize];
|
||||
+ std::vector<bool> shared;
|
||||
+ std::vector<bool> usedAsNearest;
|
||||
|
||||
for (i = 0; i < cmapSize; i++) {
|
||||
cm[i].pixel = i;
|
||||
- shared[i] = usedAsNearest[i] = false;
|
||||
+ shared.push_back(false);
|
||||
+ usedAsNearest.push_back(false);
|
||||
}
|
||||
|
||||
XQueryColors(dpy, cmap, cm, cmapSize);
|
||||
diff --git a/unix/vncpasswd/vncpasswd.cxx b/unix/vncpasswd/vncpasswd.cxx
|
||||
index 8bd4e48e..3055223e 100644
|
||||
--- a/unix/vncpasswd/vncpasswd.cxx
|
||||
+++ b/unix/vncpasswd/vncpasswd.cxx
|
||||
@@ -134,7 +134,7 @@ int main(int argc, char** argv)
|
||||
} else if (argv[i][0] == '-') {
|
||||
usage();
|
||||
} else if (!fname) {
|
||||
- fname = argv[i];
|
||||
+ fname = strDup(argv[i]);
|
||||
} else {
|
||||
usage();
|
||||
}
|
||||
@@ -165,24 +165,37 @@ int main(int argc, char** argv)
|
||||
FILE* fp = fopen(fname,"w");
|
||||
if (!fp) {
|
||||
fprintf(stderr,"Couldn't open %s for writing\n",fname);
|
||||
+ delete [] fname;
|
||||
+ delete obfuscated;
|
||||
+ delete obfuscatedReadOnly;
|
||||
exit(1);
|
||||
}
|
||||
chmod(fname, S_IRUSR|S_IWUSR);
|
||||
|
||||
if (fwrite(obfuscated->buf, obfuscated->length, 1, fp) != 1) {
|
||||
fprintf(stderr,"Writing to %s failed\n",fname);
|
||||
+ delete [] fname;
|
||||
+ delete obfuscated;
|
||||
+ delete obfuscatedReadOnly;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
+ delete obfuscated;
|
||||
+
|
||||
if (obfuscatedReadOnly) {
|
||||
if (fwrite(obfuscatedReadOnly->buf, obfuscatedReadOnly->length, 1, fp) != 1) {
|
||||
fprintf(stderr,"Writing to %s failed\n",fname);
|
||||
+ delete [] fname;
|
||||
+ delete obfuscatedReadOnly;
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
|
||||
+ delete [] fname;
|
||||
+ delete obfuscatedReadOnly;
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
diff --git a/unix/xserver/hw/vnc/vncExtInit.cc b/unix/xserver/hw/vnc/vncExtInit.cc
|
||||
index d6f6b742..7ca71d94 100644
|
||||
--- a/unix/xserver/hw/vnc/vncExtInit.cc
|
||||
+++ b/unix/xserver/hw/vnc/vncExtInit.cc
|
||||
@@ -184,7 +184,7 @@ void vncExtensionInit(void)
|
||||
listeners.push_back(new network::TcpListener(vncInetdSock));
|
||||
vlog.info("inetd wait");
|
||||
}
|
||||
- } else if (rfbunixpath.getValueStr()[0] != '\0') {
|
||||
+ } else if (((const char*)rfbunixpath)[0] != '\0') {
|
||||
char path[PATH_MAX];
|
||||
int mode = (int)rfbunixmode;
|
||||
|
||||
@@ -192,7 +192,7 @@ void vncExtensionInit(void)
|
||||
strncpy(path, rfbunixpath, sizeof(path));
|
||||
else
|
||||
snprintf(path, sizeof(path), "%s.%d",
|
||||
- rfbunixpath.getValueStr(), scr);
|
||||
+ (const char*)rfbunixpath, scr);
|
||||
path[sizeof(path)-1] = '\0';
|
||||
|
||||
listeners.push_back(new network::UnixListener(path, mode));
|
||||
diff --git a/unix/xserver/hw/vnc/vncSelection.c b/unix/xserver/hw/vnc/vncSelection.c
|
||||
index 51dfd9c6..4f3538d4 100644
|
||||
--- a/unix/xserver/hw/vnc/vncSelection.c
|
||||
+++ b/unix/xserver/hw/vnc/vncSelection.c
|
||||
@@ -105,7 +105,7 @@ void vncClientCutText(const char* str, int len)
|
||||
LOG_ERROR("Could not set PRIMARY selection");
|
||||
}
|
||||
|
||||
- vncOwnSelection(xaCLIPBOARD);
|
||||
+ rc = vncOwnSelection(xaCLIPBOARD);
|
||||
if (rc != Success)
|
||||
LOG_ERROR("Could not set CLIPBOARD selection");
|
||||
}
|
||||
diff --git a/unix/xserver/hw/vnc/xvnc.c b/unix/xserver/hw/vnc/xvnc.c
|
||||
index 3b4d2f31..c845ebc4 100644
|
||||
--- a/unix/xserver/hw/vnc/xvnc.c
|
||||
+++ b/unix/xserver/hw/vnc/xvnc.c
|
||||
@@ -766,10 +766,13 @@ vfbUninstallColormap(ColormapPtr pmap)
|
||||
curpmap = (ColormapPtr) LookupIDByType(pmap->pScreen->defColormap,
|
||||
RT_COLORMAP);
|
||||
#else
|
||||
- dixLookupResourceByType((void * *) &curpmap, pmap->pScreen->defColormap,
|
||||
- RT_COLORMAP, serverClient, DixUnknownAccess);
|
||||
+ int rc = dixLookupResourceByType((void * *) &curpmap, pmap->pScreen->defColormap,
|
||||
+ RT_COLORMAP, serverClient, DixUnknownAccess);
|
||||
+ if (rc != Success)
|
||||
+ ErrorF("Failed to uninstall color map\n");
|
||||
+ else
|
||||
#endif
|
||||
- (*pmap->pScreen->InstallColormap)(curpmap);
|
||||
+ (*pmap->pScreen->InstallColormap)(curpmap);
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/vncviewer/DesktopWindow.cxx b/vncviewer/DesktopWindow.cxx
|
||||
index d070b648..1843485a 100644
|
||||
--- a/vncviewer/DesktopWindow.cxx
|
||||
+++ b/vncviewer/DesktopWindow.cxx
|
||||
@@ -103,12 +103,12 @@ DesktopWindow::DesktopWindow(int w, int h, const char *name,
|
||||
int geom_x = 0, geom_y = 0;
|
||||
if (strcmp(geometry, "") != 0) {
|
||||
int matched;
|
||||
- matched = sscanf(geometry.getValueStr(), "+%d+%d", &geom_x, &geom_y);
|
||||
+ matched = sscanf((const char*)geometry, "+%d+%d", &geom_x, &geom_y);
|
||||
if (matched == 2) {
|
||||
force_position(1);
|
||||
} else {
|
||||
int geom_w, geom_h;
|
||||
- matched = sscanf(geometry.getValueStr(), "%dx%d+%d+%d", &geom_w, &geom_h, &geom_x, &geom_y);
|
||||
+ matched = sscanf((const char*)geometry, "%dx%d+%d+%d", &geom_w, &geom_h, &geom_x, &geom_y);
|
||||
switch (matched) {
|
||||
case 4:
|
||||
force_position(1);
|
||||
diff --git a/vncviewer/OptionsDialog.cxx b/vncviewer/OptionsDialog.cxx
|
||||
index b018c95b..62b5d9c5 100644
|
||||
--- a/vncviewer/OptionsDialog.cxx
|
||||
+++ b/vncviewer/OptionsDialog.cxx
|
||||
@@ -282,7 +282,7 @@ void OptionsDialog::loadOptions(void)
|
||||
/* Screen */
|
||||
int width, height;
|
||||
|
||||
- if (sscanf(desktopSize.getValueStr(), "%dx%d", &width, &height) != 2) {
|
||||
+ if (sscanf((const char*)desktopSize, "%dx%d", &width, &height) != 2) {
|
||||
desktopSizeCheckbox->value(false);
|
||||
desktopWidthInput->value("1024");
|
||||
desktopHeightInput->value("768");
|
||||
diff --git a/vncviewer/ServerDialog.cxx b/vncviewer/ServerDialog.cxx
|
||||
index de67f87b..fec17896 100644
|
||||
--- a/vncviewer/ServerDialog.cxx
|
||||
+++ b/vncviewer/ServerDialog.cxx
|
||||
@@ -150,7 +150,7 @@ void ServerDialog::handleLoad(Fl_Widget *widget, void *data)
|
||||
return;
|
||||
}
|
||||
|
||||
- const char* filename = strdup(file_chooser->value());
|
||||
+ const char* filename = file_chooser->value();
|
||||
|
||||
try {
|
||||
dialog->serverName->value(loadViewerParameters(filename));
|
||||
@@ -165,8 +165,8 @@ void ServerDialog::handleLoad(Fl_Widget *widget, void *data)
|
||||
void ServerDialog::handleSaveAs(Fl_Widget *widget, void *data)
|
||||
{
|
||||
ServerDialog *dialog = (ServerDialog*)data;
|
||||
- const char* servername = strdup(dialog->serverName->value());
|
||||
- char* filename;
|
||||
+ const char* servername = dialog->serverName->value();
|
||||
+ const char* filename;
|
||||
|
||||
Fl_File_Chooser* file_chooser = new Fl_File_Chooser("", _("TigerVNC configuration (*.tigervnc)"),
|
||||
2, _("Save the TigerVNC configuration to file"));
|
||||
@@ -187,7 +187,7 @@ void ServerDialog::handleSaveAs(Fl_Widget *widget, void *data)
|
||||
return;
|
||||
}
|
||||
|
||||
- filename = strdup(file_chooser->value());
|
||||
+ filename = file_chooser->value();
|
||||
|
||||
FILE* f = fopen(filename, "r");
|
||||
if (f) {
|
||||
@@ -235,7 +235,7 @@ void ServerDialog::handleCancel(Fl_Widget *widget, void *data)
|
||||
void ServerDialog::handleConnect(Fl_Widget *widget, void *data)
|
||||
{
|
||||
ServerDialog *dialog = (ServerDialog*)data;
|
||||
- const char* servername = strdup(dialog->serverName->value());
|
||||
+ const char* servername = dialog->serverName->value();
|
||||
|
||||
dialog->hide();
|
||||
|
||||
diff --git a/vncviewer/parameters.cxx b/vncviewer/parameters.cxx
|
||||
index 51cce3d7..94cc1b05 100644
|
||||
--- a/vncviewer/parameters.cxx
|
||||
+++ b/vncviewer/parameters.cxx
|
||||
@@ -499,6 +499,7 @@ void saveViewerParameters(const char *filename, const char *servername) {
|
||||
}
|
||||
|
||||
snprintf(filepath, sizeof(filepath), "%sdefault.tigervnc", homeDir);
|
||||
+ free(homeDir);
|
||||
} else {
|
||||
snprintf(filepath, sizeof(filepath), "%s", filename);
|
||||
}
|
||||
@@ -555,6 +556,7 @@ char* loadViewerParameters(const char *filename) {
|
||||
"can't obtain home directory path."));
|
||||
|
||||
snprintf(filepath, sizeof(filepath), "%sdefault.tigervnc", homeDir);
|
||||
+ free(homeDir);
|
||||
} else {
|
||||
snprintf(filepath, sizeof(filepath), "%s", filename);
|
||||
}
|
||||
diff --git a/vncviewer/vncviewer.cxx b/vncviewer/vncviewer.cxx
|
||||
index f076565f..a9d4dfea 100644
|
||||
--- a/vncviewer/vncviewer.cxx
|
||||
+++ b/vncviewer/vncviewer.cxx
|
||||
@@ -470,9 +470,9 @@ static int mktunnel()
|
||||
int localPort = findFreeTcpPort();
|
||||
int remotePort;
|
||||
|
||||
- gatewayHost = strDup(via.getValueStr());
|
||||
if (interpretViaParam(remoteHost, &remotePort, localPort) != 0)
|
||||
return 1;
|
||||
+ gatewayHost = (const char*)via;
|
||||
createTunnel(gatewayHost, remoteHost, remotePort, localPort);
|
||||
|
||||
return 0;
|
@ -1,9 +1,9 @@
|
||||
diff --git a/unix/xserver/hw/vnc/InputXKB.c b/unix/xserver/hw/vnc/InputXKB.c
|
||||
index a9bd11d..7b54b43 100644
|
||||
index f84a6e4..4eac939 100644
|
||||
--- a/unix/xserver/hw/vnc/InputXKB.c
|
||||
+++ b/unix/xserver/hw/vnc/InputXKB.c
|
||||
@@ -214,10 +214,7 @@ void vncPrepareInputDevices(void)
|
||||
|
||||
@@ -226,10 +226,7 @@ void vncPrepareInputDevices(void)
|
||||
|
||||
unsigned vncGetKeyboardState(void)
|
||||
{
|
||||
- DeviceIntPtr master;
|
||||
@ -12,75 +12,75 @@ index a9bd11d..7b54b43 100644
|
||||
- return XkbStateFieldFromRec(&master->key->xkbInfo->state);
|
||||
+ return XkbStateFieldFromRec(&vncKeyboardDev->master->key->xkbInfo->state);
|
||||
}
|
||||
|
||||
|
||||
unsigned vncGetLevelThreeMask(void)
|
||||
@@ -238,7 +235,7 @@ unsigned vncGetLevelThreeMask(void)
|
||||
@@ -250,7 +247,7 @@ unsigned vncGetLevelThreeMask(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
- xkb = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT)->key->xkbInfo->desc;
|
||||
+ xkb = vncKeyboardDev->master->key->xkbInfo->desc;
|
||||
|
||||
|
||||
act = XkbKeyActionPtr(xkb, keycode, state);
|
||||
if (act == NULL)
|
||||
@@ -263,7 +260,7 @@ KeyCode vncPressShift(void)
|
||||
@@ -275,7 +272,7 @@ KeyCode vncPressShift(void)
|
||||
if (state & ShiftMask)
|
||||
return 0;
|
||||
|
||||
|
||||
- xkb = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT)->key->xkbInfo->desc;
|
||||
+ xkb = vncKeyboardDev->master->key->xkbInfo->desc;
|
||||
for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) {
|
||||
XkbAction *act;
|
||||
unsigned char mask;
|
||||
@@ -303,7 +300,7 @@ size_t vncReleaseShift(KeyCode *keys, size_t maxKeys)
|
||||
|
||||
@@ -315,7 +312,7 @@ size_t vncReleaseShift(KeyCode *keys, size_t maxKeys)
|
||||
|
||||
count = 0;
|
||||
|
||||
|
||||
- master = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT);
|
||||
+ master = vncKeyboardDev->master;
|
||||
xkb = master->key->xkbInfo->desc;
|
||||
for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) {
|
||||
XkbAction *act;
|
||||
@@ -359,7 +356,7 @@ KeyCode vncPressLevelThree(void)
|
||||
@@ -371,7 +368,7 @@ KeyCode vncPressLevelThree(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
- xkb = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT)->key->xkbInfo->desc;
|
||||
+ xkb = vncKeyboardDev->master->key->xkbInfo->desc;
|
||||
|
||||
|
||||
act = XkbKeyActionPtr(xkb, keycode, state);
|
||||
if (act == NULL)
|
||||
@@ -390,7 +387,7 @@ size_t vncReleaseLevelThree(KeyCode *keys, size_t maxKeys)
|
||||
|
||||
@@ -402,7 +399,7 @@ size_t vncReleaseLevelThree(KeyCode *keys, size_t maxKeys)
|
||||
|
||||
count = 0;
|
||||
|
||||
|
||||
- master = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT);
|
||||
+ master = vncKeyboardDev->master;
|
||||
xkb = master->key->xkbInfo->desc;
|
||||
for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) {
|
||||
XkbAction *act;
|
||||
@@ -433,7 +430,7 @@ KeyCode vncKeysymToKeycode(KeySym keysym, unsigned state, unsigned *new_state)
|
||||
if (new_state != NULL)
|
||||
@@ -447,7 +444,7 @@ KeyCode vncKeysymToKeycode(KeySym keysym, unsigned state, unsigned *new_state)
|
||||
*new_state = state;
|
||||
|
||||
|
||||
fallback = 0;
|
||||
- xkb = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT)->key->xkbInfo->desc;
|
||||
+ xkb = vncKeyboardDev->master->key->xkbInfo->desc;
|
||||
for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) {
|
||||
unsigned int state_out;
|
||||
KeySym dummy;
|
||||
@@ -511,7 +508,7 @@ int vncIsAffectedByNumLock(KeyCode keycode)
|
||||
@@ -551,7 +548,7 @@ int vncIsAffectedByNumLock(KeyCode keycode)
|
||||
if (numlock_keycode == 0)
|
||||
return 0;
|
||||
|
||||
|
||||
- xkb = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT)->key->xkbInfo->desc;
|
||||
+ xkb = vncKeyboardDev->master->key->xkbInfo->desc;
|
||||
|
||||
|
||||
act = XkbKeyActionPtr(xkb, numlock_keycode, state);
|
||||
if (act == NULL)
|
||||
@@ -545,7 +542,7 @@ KeyCode vncAddKeysym(KeySym keysym, unsigned state)
|
||||
@@ -585,7 +582,7 @@ KeyCode vncAddKeysym(KeySym keysym, unsigned state)
|
||||
KeySym *syms;
|
||||
KeySym upper, lower;
|
||||
|
||||
|
||||
- master = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT);
|
||||
+ master = vncKeyboardDev->master;
|
||||
xkb = master->key->xkbInfo->desc;
|
||||
|
@ -1,28 +0,0 @@
|
||||
diff --git a/unix/vncserver b/unix/vncserver
|
||||
index 9e7a6ac..139f960 100755
|
||||
--- a/unix/vncserver
|
||||
+++ b/unix/vncserver
|
||||
@@ -684,6 +684,7 @@ sub Usage
|
||||
" [-geometry <width>x<height>]\n".
|
||||
" [-pixelformat rgbNNN|bgrNNN]\n".
|
||||
" [-fp <font-path>]\n".
|
||||
+ " [-cc <visual>]\n".
|
||||
" [-fg]\n".
|
||||
" [-autokill]\n".
|
||||
" [-noxstartup]\n".
|
||||
diff --git a/vncviewer/vncviewer.cxx b/vncviewer/vncviewer.cxx
|
||||
index f076565..05669a4 100644
|
||||
--- a/vncviewer/vncviewer.cxx
|
||||
+++ b/vncviewer/vncviewer.cxx
|
||||
@@ -352,6 +352,11 @@ static void usage(const char *programName)
|
||||
" %s [parameters] -listen [port] [parameters]\n"
|
||||
" %s [parameters] [.tigervnc file]\n",
|
||||
programName, programName, programName);
|
||||
+ fprintf(stderr,"\n"
|
||||
+ "Options:\n\n"
|
||||
+ " -display Xdisplay - Specifies the X display for the viewer window\n"
|
||||
+ " -geometry geometry - Standard X position and sizing specification.\n");
|
||||
+
|
||||
fprintf(stderr,"\n"
|
||||
"Parameters can be turned on with -<param> or off with -<param>=0\n"
|
||||
"Parameters which take a value can be specified as "
|
@ -1,13 +1,41 @@
|
||||
diff --git a/common/rfb/Password.cxx b/common/rfb/Password.cxx
|
||||
index e4a508c..f555c57 100644
|
||||
--- a/common/rfb/Password.cxx
|
||||
+++ b/common/rfb/Password.cxx
|
||||
@@ -55,7 +55,7 @@ PlainPasswd::~PlainPasswd() {
|
||||
|
||||
void PlainPasswd::replaceBuf(char* b) {
|
||||
if (buf)
|
||||
- memset(buf, 0, strlen(buf));
|
||||
+ memset(buf, 0, length ? length : strlen(buf));
|
||||
CharArray::replaceBuf(b);
|
||||
}
|
||||
|
||||
diff --git a/common/rfb/util.h b/common/rfb/util.h
|
||||
index b678b89..9e59bd3 100644
|
||||
index 3100f90..764692a 100644
|
||||
--- a/common/rfb/util.h
|
||||
+++ b/common/rfb/util.h
|
||||
@@ -50,7 +50,7 @@ namespace rfb {
|
||||
@@ -51,16 +51,21 @@ namespace rfb {
|
||||
CharArray() : buf(0) {}
|
||||
CharArray(char* str) : buf(str) {} // note: assumes ownership
|
||||
CharArray(int len) {
|
||||
- buf = new char[len];
|
||||
+ buf = new char[len]();
|
||||
CharArray(size_t len) {
|
||||
+ length = len;
|
||||
buf = new char[len]();
|
||||
}
|
||||
~CharArray() {
|
||||
delete [] buf;
|
||||
- delete [] buf;
|
||||
+ if (buf) {
|
||||
+ delete [] buf;
|
||||
+ buf = nullptr;
|
||||
+ }
|
||||
}
|
||||
void format(const char *fmt, ...) __printf_attr(2, 3);
|
||||
// Get the buffer pointer & clear it (i.e. caller takes ownership)
|
||||
char* takeBuf() {char* tmp = buf; buf = 0; return tmp;}
|
||||
- void replaceBuf(char* b) {delete [] buf; buf = b;}
|
||||
+ void replaceBuf(char* b) {if (buf) delete [] buf; buf = b;}
|
||||
char* buf;
|
||||
+ size_t length = 0;
|
||||
private:
|
||||
CharArray(const CharArray&);
|
||||
CharArray& operator=(const CharArray&);
|
||||
|
@ -0,0 +1,57 @@
|
||||
From 0f1ded057dbf875e69a0d72418d95610db8fa6a3 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre Ossman <ossman@cendio.se>
|
||||
Date: Mon, 30 Dec 2019 10:50:52 +0100
|
||||
Subject: [PATCH] Provide correct dimensions for XShm setup
|
||||
|
||||
Since 53f913a we initialize the underlying PixelBuffer with 0x0
|
||||
dimensions, which means we need to keep more explicit track of what
|
||||
we are trying to allocate in the setup methods.
|
||||
---
|
||||
vncviewer/PlatformPixelBuffer.cxx | 6 +++---
|
||||
vncviewer/PlatformPixelBuffer.h | 2 +-
|
||||
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/vncviewer/PlatformPixelBuffer.cxx b/vncviewer/PlatformPixelBuffer.cxx
|
||||
index 61f7b743b..59e51d596 100644
|
||||
--- a/vncviewer/PlatformPixelBuffer.cxx
|
||||
+++ b/vncviewer/PlatformPixelBuffer.cxx
|
||||
@@ -43,7 +43,7 @@ PlatformPixelBuffer::PlatformPixelBuffer(int width, int height) :
|
||||
#endif
|
||||
{
|
||||
#if !defined(WIN32) && !defined(__APPLE__)
|
||||
- if (!setupShm()) {
|
||||
+ if (!setupShm(width, height)) {
|
||||
xim = XCreateImage(fl_display, CopyFromParent, 32,
|
||||
ZPixmap, 0, 0, width, height, 32, 0);
|
||||
if (!xim)
|
||||
@@ -136,7 +136,7 @@ static int XShmAttachErrorHandler(Display *dpy, XErrorEvent *error)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-bool PlatformPixelBuffer::setupShm()
|
||||
+bool PlatformPixelBuffer::setupShm(int width, int height)
|
||||
{
|
||||
int major, minor;
|
||||
Bool pixmaps;
|
||||
@@ -153,7 +153,7 @@ bool PlatformPixelBuffer::setupShm()
|
||||
shminfo = new XShmSegmentInfo;
|
||||
|
||||
xim = XShmCreateImage(fl_display, CopyFromParent, 32,
|
||||
- ZPixmap, 0, shminfo, width(), height());
|
||||
+ ZPixmap, 0, shminfo, width, height);
|
||||
if (!xim)
|
||||
goto free_shminfo;
|
||||
|
||||
diff --git a/vncviewer/PlatformPixelBuffer.h b/vncviewer/PlatformPixelBuffer.h
|
||||
index f9038cd9c..ec439f64f 100644
|
||||
--- a/vncviewer/PlatformPixelBuffer.h
|
||||
+++ b/vncviewer/PlatformPixelBuffer.h
|
||||
@@ -53,7 +53,7 @@ class PlatformPixelBuffer: public rfb::FullFramePixelBuffer, public Surface {
|
||||
|
||||
#if !defined(WIN32) && !defined(__APPLE__)
|
||||
protected:
|
||||
- bool setupShm();
|
||||
+ bool setupShm(int width, int height);
|
||||
|
||||
protected:
|
||||
XShmSegmentInfo *shminfo;
|
@ -1,9 +0,0 @@
|
||||
diff -up tigervnc-1.3.0/unix/vncserver.shebang tigervnc-1.3.0/unix/vncserver
|
||||
--- tigervnc-1.3.0/unix/vncserver.shebang 2013-07-24 12:22:34.962158378 +0100
|
||||
+++ tigervnc-1.3.0/unix/vncserver 2013-07-24 12:22:41.593188190 +0100
|
||||
@@ -1,4 +1,4 @@
|
||||
-#!/usr/bin/env perl
|
||||
+#!/usr/bin/perl
|
||||
#
|
||||
# Copyright (C) 2009-2010 D. R. Commander. All Rights Reserved.
|
||||
# Copyright (C) 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
|
2176
SOURCES/tigervnc-systemd-support.patch
Normal file
2176
SOURCES/tigervnc-systemd-support.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,13 +0,0 @@
|
||||
diff --git a/unix/vncserver b/unix/vncserver
|
||||
index bb4f2feb..68be032d 100755
|
||||
--- a/unix/vncserver
|
||||
+++ b/unix/vncserver
|
||||
@@ -709,7 +709,7 @@ sub List
|
||||
}
|
||||
}
|
||||
}
|
||||
- exit 1;
|
||||
+ exit;
|
||||
}
|
||||
|
||||
|
@ -1,40 +0,0 @@
|
||||
diff --git a/unix/vncserver b/unix/vncserver
|
||||
index bb4f2feb..b038dd3b 100755
|
||||
--- a/unix/vncserver
|
||||
+++ b/unix/vncserver
|
||||
@@ -58,27 +58,14 @@ $defaultXStartup
|
||||
= ("#!/bin/sh\n\n".
|
||||
"unset SESSION_MANAGER\n".
|
||||
"unset DBUS_SESSION_BUS_ADDRESS\n".
|
||||
- "OS=`uname -s`\n".
|
||||
- "if [ \$OS = 'Linux' ]; then\n".
|
||||
- " case \"\$WINDOWMANAGER\" in\n".
|
||||
- " \*gnome\*)\n".
|
||||
- " if [ -e /etc/SuSE-release ]; then\n".
|
||||
- " PATH=\$PATH:/opt/gnome/bin\n".
|
||||
- " export PATH\n".
|
||||
- " fi\n".
|
||||
- " ;;\n".
|
||||
- " esac\n".
|
||||
- "fi\n".
|
||||
- "if [ -x /etc/X11/xinit/xinitrc ]; then\n".
|
||||
- " exec /etc/X11/xinit/xinitrc\n".
|
||||
- "fi\n".
|
||||
- "if [ -f /etc/X11/xinit/xinitrc ]; then\n".
|
||||
- " exec sh /etc/X11/xinit/xinitrc\n".
|
||||
- "fi\n".
|
||||
- "[ -r \$HOME/.Xresources ] && xrdb \$HOME/.Xresources\n".
|
||||
- "xsetroot -solid grey\n".
|
||||
- "xterm -geometry 80x24+10+10 -ls -title \"\$VNCDESKTOP Desktop\" &\n".
|
||||
- "twm &\n");
|
||||
+ "/etc/X11/xinit/xinitrc\n".
|
||||
+ "# Assume either Gnome will be started by default when installed\n".
|
||||
+ "# We want to kill the session automatically in this case when user logs out. In case you modify\n".
|
||||
+ "# /etc/X11/xinit/Xclients or ~/.Xclients yourself to achieve a different result, then you should\n".
|
||||
+ "# be responsible to modify below code to avoid that your session will be automatically killed\n".
|
||||
+ "if [ -e /usr/bin/gnome-session ]; then\n".
|
||||
+ " vncserver -kill \$DISPLAY\n".
|
||||
+ "fi\n");
|
||||
|
||||
$defaultConfig
|
||||
= ("## Supported server options to pass to vncserver upon invocation can be listed\n".
|
@ -1,45 +0,0 @@
|
||||
# The vncserver service unit file
|
||||
#
|
||||
# Quick HowTo:
|
||||
# 1. Copy this file to /etc/systemd/system/vncserver@.service
|
||||
# 2. Replace <USER> with the actual user name and edit vncserver
|
||||
# parameters in the wrapper script located in /usr/bin/vncserver_wrapper
|
||||
# 3. Run `systemctl daemon-reload`
|
||||
# 4. Run `systemctl enable vncserver@:<display>.service`
|
||||
#
|
||||
# DO NOT RUN THIS SERVICE if your local area network is
|
||||
# untrusted! For a secure way of using VNC, you should
|
||||
# limit connections to the local host and then tunnel from
|
||||
# the machine you want to view VNC on (host A) to the machine
|
||||
# whose VNC output you want to view (host B)
|
||||
#
|
||||
# [user@hostA ~]$ ssh -v -C -L 590N:localhost:590M hostB
|
||||
#
|
||||
# this will open a connection on port 590N of your hostA to hostB's port 590M
|
||||
# (in fact, it ssh-connects to hostB and then connects to localhost (on hostB).
|
||||
# See the ssh man page for details on port forwarding)
|
||||
#
|
||||
# You can then point a VNC client on hostA at vncdisplay N of localhost and with
|
||||
# the help of ssh, you end up seeing what hostB makes available on port 590M
|
||||
#
|
||||
# Use "-nolisten tcp" to prevent X connections to your VNC server via TCP.
|
||||
#
|
||||
# Use "-localhost" to prevent remote VNC clients connecting except when
|
||||
# doing so through a secure tunnel. See the "-via" option in the
|
||||
# `man vncviewer' manual page.
|
||||
|
||||
|
||||
[Unit]
|
||||
Description=Remote desktop service (VNC)
|
||||
After=syslog.target network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
|
||||
# Clean any existing files in /tmp/.X11-unix environment
|
||||
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
|
||||
ExecStart=/usr/bin/vncserver_wrapper <USER> %i
|
||||
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
@ -1,59 +0,0 @@
|
||||
# The vncserver service unit file
|
||||
#
|
||||
# Quick HowTo: As the User wanting to have this functionality
|
||||
#
|
||||
# 1. Copy this file to ~/.config/systemd/user/ (Optional, in case default settings are not suitable)
|
||||
#
|
||||
# $ mkdir -p ~/.config/systemd/user
|
||||
# $ cp /usr/lib/systemd/user/vncserver@.service ~/.config/systemd/user/
|
||||
#
|
||||
# 2. Reload user's systemd
|
||||
#
|
||||
# $ systemctl --user daemon-reload
|
||||
#
|
||||
# 3. Start the service immediately and enable it at boot
|
||||
#
|
||||
# $ systemctl --user enable vncserver@:<display>.service --now
|
||||
#
|
||||
# 4. Enable lingering
|
||||
#
|
||||
# $ loginctl enable-linger
|
||||
#
|
||||
# DO NOT RUN THIS SERVICE if your local area network is
|
||||
# untrusted! For a secure way of using VNC, you should
|
||||
# limit connections to the local host and then tunnel from
|
||||
# the machine you want to view VNC on (host A) to the machine
|
||||
# whose VNC output you want to view (host B)
|
||||
#
|
||||
# [user@hostA ~]$ ssh -v -C -L 590N:localhost:590M hostB
|
||||
#
|
||||
# this will open a connection on port 590N of your hostA to hostB's port 590M
|
||||
# (in fact, it ssh-connects to hostB and then connects to localhost (on hostB).
|
||||
# See the ssh man page for details on port forwarding)
|
||||
#
|
||||
# You can then point a VNC client on hostA at vncdisplay N of localhost and with
|
||||
# the help of ssh, you end up seeing what hostB makes available on port 590M
|
||||
#
|
||||
# Use "-nolisten tcp" to prevent X connections to your VNC server via TCP.
|
||||
#
|
||||
# Use "-localhost" to prevent remote VNC clients connecting except when
|
||||
# doing so through a secure tunnel. See the "-via" option in the
|
||||
# `man vncviewer' manual page.
|
||||
|
||||
|
||||
[Unit]
|
||||
Description=Remote desktop service (VNC)
|
||||
After=syslog.target network.target
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
|
||||
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
|
||||
ExecStart=/usr/bin/vncserver %i
|
||||
ExecStop=/usr/bin/vncserver -kill %i
|
||||
|
||||
Restart=on-success
|
||||
RestartSec=15
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
@ -1 +0,0 @@
|
||||
# THIS FILE HAS BEEN REPLACED BY /lib/systemd/system/vncserver@.service
|
@ -1,42 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
USER="$1"
|
||||
INSTANCE="$2"
|
||||
|
||||
die() {
|
||||
echo "FATAL: ${@:-}" >&2
|
||||
exit 2
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
[ -n "$VNCPID" ] || return
|
||||
if kill -0 $VNCPID 2>/dev/null; then
|
||||
kill $VNCPID
|
||||
fi
|
||||
}
|
||||
|
||||
trap cleanup TERM INT HUP
|
||||
|
||||
[ -n "$USER" -a -n "$INSTANCE" ] || die "Invalid usage!"
|
||||
|
||||
/usr/sbin/runuser -l "$USER" -c "/usr/bin/vncserver ${INSTANCE}"
|
||||
[ $? -eq 0 ] || die "'runuser -l $USER' failed!"
|
||||
|
||||
# Wait up to 5 seconds for vncserver to be up
|
||||
for tries in $(seq 1 50); do
|
||||
[ -e "~$USER/.vnc/$(hostname)${INSTANCE}.pid" ] && break
|
||||
sleep 0.1
|
||||
done
|
||||
|
||||
eval HOME=~$USER
|
||||
|
||||
VNCPID=$(cat "$HOME/.vnc/$(hostname)${INSTANCE}.pid" 2>/dev/null || true)
|
||||
[ -n "$VNCPID" ] || die "'vncserver ${INSTANCE}' failed to start after 5 seconds!"
|
||||
|
||||
echo "'vncserver ${INSTANCE}' has PID $VNCPID, waiting until it exits ..."
|
||||
|
||||
while kill -0 $VNCPID 2>/dev/null; do
|
||||
sleep 5
|
||||
done
|
||||
|
||||
echo "PID $VNCPID exited, exiting ..."
|
@ -1,6 +1,6 @@
|
||||
Name: tigervnc
|
||||
Version: 1.9.0
|
||||
Release: 12%{?dist}
|
||||
Version: 1.10.1
|
||||
Release: 5%{?dist}
|
||||
Summary: A TigerVNC remote display system
|
||||
|
||||
%global _hardened_build 1
|
||||
@ -9,28 +9,23 @@ License: GPLv2+
|
||||
URL: http://www.tigervnc.com
|
||||
|
||||
Source0: %{name}-%{version}.tar.gz
|
||||
Source1: vncserver-system.service
|
||||
Source2: vncserver-user.service
|
||||
Source3: vncserver.sysconfig
|
||||
Source4: 10-libvnc.conf
|
||||
Source5: xvnc.service
|
||||
Source6: xvnc.socket
|
||||
Source7: vncserver_wrapper
|
||||
Source1: xvnc.service
|
||||
Source2: xvnc.socket
|
||||
Source3: 10-libvnc.conf
|
||||
Source4: HOWTO.md
|
||||
|
||||
Patch1: tigervnc-manpages.patch
|
||||
Patch2: tigervnc-getmaster.patch
|
||||
Patch3: tigervnc-shebang.patch
|
||||
Patch4: tigervnc-xstartup.patch
|
||||
Patch5: tigervnc-cursor.patch
|
||||
Patch6: tigervnc-1.3.1-CVE-2014-8240.patch
|
||||
Patch7: tigervnc-1.3.1-do-not-die-when-port-is-already-taken.patch
|
||||
Patch8: tigervnc-let-user-know-about-not-using-view-only-password.patch
|
||||
Patch9: tigervnc-working-tls-on-fips-systems.patch
|
||||
Patch11: tigervnc-utilize-system-crypto-policies.patch
|
||||
Patch12: tigervnc-passwd-crash-with-malloc-checks.patch
|
||||
Patch13: tigervnc-vncserver-do-not-return-returncode-indicating-error.patch
|
||||
Patch13: 0001-xserver-add-no-op-input-thread-init-function.patch
|
||||
Patch14: tigervnc-provide-correct-dimensions-for-xshm-setup.patch
|
||||
|
||||
Patch50: tigervnc-covscan.patch
|
||||
# Upstream patches
|
||||
Patch50: tigervnc-systemd-support.patch
|
||||
|
||||
# This is tigervnc-%%{version}/unix/xserver116.patch rebased on the latest xorg
|
||||
Patch100: tigervnc-xserver120.patch
|
||||
@ -42,12 +37,11 @@ BuildRequires: libX11-devel, automake, autoconf, libtool, gettext, gettext-auto
|
||||
BuildRequires: libXext-devel, xorg-x11-server-source, libXi-devel
|
||||
BuildRequires: xorg-x11-xtrans-devel, xorg-x11-util-macros, libXtst-devel
|
||||
BuildRequires: libxkbfile-devel, openssl-devel, libpciaccess-devel
|
||||
BuildRequires: mesa-libGL-devel, libXinerama-devel
|
||||
BuildRequires: mesa-libGL-devel, libXinerama-devel, xorg-x11-font-utils
|
||||
BuildRequires: freetype-devel, libXdmcp-devel, libxshmfence-devel
|
||||
BuildRequires: desktop-file-utils, java-devel, jpackage-utils
|
||||
BuildRequires: libjpeg-turbo-devel, gnutls-devel, pam-devel
|
||||
BuildRequires: libdrm-devel, libXt-devel, pixman-devel
|
||||
BuildRequires: systemd, cmake
|
||||
BuildRequires: systemd, cmake, desktop-file-utils, selinux-policy-devel
|
||||
%if 0%{?fedora} > 24 || 0%{?rhel} >= 7
|
||||
BuildRequires: libXfont2-devel
|
||||
%else
|
||||
@ -79,7 +73,8 @@ server.
|
||||
%package server
|
||||
Summary: A TigerVNC server
|
||||
Requires: perl-interpreter
|
||||
Requires: tigervnc-server-minimal
|
||||
Requires: tigervnc-server-minimal = %{version}-%{release}
|
||||
Requires: tigervnc-selinux = %{version}-%{release}
|
||||
Requires: xorg-x11-xauth
|
||||
Requires: xorg-x11-xinit
|
||||
Requires(post): systemd
|
||||
@ -100,7 +95,7 @@ Requires(post): chkconfig
|
||||
Requires(preun):chkconfig
|
||||
|
||||
Requires: mesa-dri-drivers, xkeyboard-config, xorg-x11-xkb-utils
|
||||
Requires: tigervnc-license
|
||||
Requires: tigervnc-license, dbus-x11
|
||||
|
||||
%description server-minimal
|
||||
The VNC system allows you to access the same desktop from a wide
|
||||
@ -119,15 +114,6 @@ This package contains libvnc.so module to X server, allowing others
|
||||
to access the desktop on your machine.
|
||||
%endif
|
||||
|
||||
%package server-applet
|
||||
Summary: Java TigerVNC viewer applet for TigerVNC server
|
||||
Requires: tigervnc-server, java, jpackage-utils
|
||||
BuildArch: noarch
|
||||
|
||||
%description server-applet
|
||||
The Java TigerVNC viewer applet for web browsers. Install this package to allow
|
||||
clients to use web browser when connect to the TigerVNC server.
|
||||
|
||||
%package license
|
||||
Summary: License of TigerVNC suite
|
||||
BuildArch: noarch
|
||||
@ -142,6 +128,18 @@ BuildArch: noarch
|
||||
%description icons
|
||||
This package contains icons for TigerVNC viewer
|
||||
|
||||
%package selinux
|
||||
Summary: SELinux module for TigerVNC
|
||||
BuildArch: noarch
|
||||
Requires(pre): libselinux-utils
|
||||
Requires(post): selinux-policy >= %{_selinux_policy_version}
|
||||
Requires(post): policycoreutils
|
||||
Requires(post): libselinux-utils
|
||||
|
||||
%description selinux
|
||||
This package provides the SELinux policy module to ensure TigerVNC
|
||||
runs properly under an environment with SELinux enabled.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
@ -154,19 +152,9 @@ done
|
||||
%patch101 -p1 -b .rpath
|
||||
popd
|
||||
|
||||
# Synchronise manpages and --help output (bug #980870).
|
||||
%patch1 -p1 -b .manpages
|
||||
|
||||
# libvnc.so: don't use unexported GetMaster function (bug #744881 again).
|
||||
%patch2 -p1 -b .getmaster
|
||||
|
||||
# Don't use shebang in vncserver script.
|
||||
%patch3 -p1 -b .shebang
|
||||
|
||||
# Clearer xstartup file (bug #923655).
|
||||
# Bug 1665876 - Tigervnc not starting on RHEL 7.6 server without -noxstartup option
|
||||
%patch4 -p1 -b .xstartup
|
||||
|
||||
# Fixed viewer crash when cursor has not been set (bug #1051333).
|
||||
%patch5 -p1 -b .cursor
|
||||
|
||||
@ -174,9 +162,6 @@ popd
|
||||
# buffer overflow in screen size handling
|
||||
%patch6 -p1 -b .tigervnc-1.3.1-CVE-2014-8240
|
||||
|
||||
# Bug 1322155 - Xorg socket conflict for VNC port 5901
|
||||
%patch7 -p1 -b .do-not-die-when-port-is-already-taken
|
||||
|
||||
# Bug 1447555 - view-only accepts enter, unclear whether default password is generated or not
|
||||
%patch8 -p1 -b .let-user-know-about-not-using-view-only-password
|
||||
|
||||
@ -188,9 +173,19 @@ popd
|
||||
|
||||
%patch12 -p1 -b .passwd-crash-with-malloc-checks
|
||||
|
||||
%patch13 -p1 -b .vncserver-do-not-return-returncode-indicating-error
|
||||
%patch13 -p1 -b .xserver-add-no-op-input-thread-init-function.
|
||||
|
||||
%patch50 -p1 -b .tigervnc-covscan
|
||||
%patch14 -p1 -b .provide-correct-dimensions-for-xshm-setup
|
||||
|
||||
# HACK make sure we are able to successfuly apply a patch. This is because we will
|
||||
# be creating a directory under name which already exists as a file and it also seems
|
||||
# to be not possible to create a directory with a patch
|
||||
pushd unix
|
||||
rm vncserver
|
||||
mkdir vncserver
|
||||
popd
|
||||
|
||||
%patch50 -p1 -b .tigervnc-systemd-support
|
||||
|
||||
%build
|
||||
%ifarch sparcv9 sparc64 s390 s390x
|
||||
@ -230,34 +225,27 @@ pushd media
|
||||
make
|
||||
popd
|
||||
|
||||
# Build Java applet
|
||||
pushd java
|
||||
%{cmake} .
|
||||
JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8" make
|
||||
# SELinux
|
||||
pushd unix/vncserver/selinux
|
||||
make
|
||||
popd
|
||||
|
||||
|
||||
%install
|
||||
%make_install
|
||||
rm -f %{buildroot}%{_docdir}/%{name}-%{version}/{README.rst,LICENCE.TXT}
|
||||
|
||||
pushd unix/xserver/hw/vnc
|
||||
make install DESTDIR=%{buildroot}
|
||||
popd
|
||||
|
||||
pushd unix/vncserver/selinux
|
||||
make install DESTDIR=%{buildroot}
|
||||
popd
|
||||
|
||||
|
||||
# Install systemd unit file
|
||||
mkdir -p %{buildroot}%{_unitdir}
|
||||
mkdir -p %{buildroot}%{_userunitdir}
|
||||
install -m644 %{SOURCE1} %{buildroot}%{_unitdir}/vncserver@.service
|
||||
install -m644 %{SOURCE2} %{buildroot}%{_userunitdir}/vncserver@.service
|
||||
install -m644 %{SOURCE5} %{buildroot}%{_unitdir}/xvnc@.service
|
||||
install -m644 %{SOURCE6} %{buildroot}%{_unitdir}/xvnc.socket
|
||||
rm -rf %{buildroot}%{_initrddir}
|
||||
|
||||
# Install vncserver wrapper script
|
||||
install -m744 %{SOURCE7} %{buildroot}%{_bindir}/vncserver_wrapper
|
||||
|
||||
mkdir -p %{buildroot}%{_sysconfdir}/sysconfig
|
||||
install -m644 %{SOURCE3} %{buildroot}%{_sysconfdir}/sysconfig/vncservers
|
||||
install -m644 %{SOURCE1} %{buildroot}%{_unitdir}/xvnc@.service
|
||||
install -m644 %{SOURCE2} %{buildroot}%{_unitdir}/xvnc.socket
|
||||
|
||||
# Install desktop stuff
|
||||
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/{16x16,24x24,48x48}/apps
|
||||
@ -268,13 +256,14 @@ install -m644 tigervnc_$s.png %{buildroot}%{_datadir}/icons/hicolor/${s}x$s/apps
|
||||
done
|
||||
popd
|
||||
|
||||
|
||||
# Install Java applet
|
||||
pushd java
|
||||
mkdir -p %{buildroot}%{_datadir}/vnc/classes
|
||||
install -m755 VncViewer.jar %{buildroot}%{_datadir}/vnc/classes
|
||||
install -m644 com/tigervnc/vncviewer/index.vnc %{buildroot}%{_datadir}/vnc/classes
|
||||
popd
|
||||
# Install a replacement for /usr/bin/vncserver which will tell the user to read the
|
||||
# HOWTO.md file
|
||||
cat <<EOF > %{buildroot}/%{_bindir}/vncserver
|
||||
#!/bin/bash
|
||||
echo "vncserver has been replaced by a systemd unit."
|
||||
echo "Please read /usr/share/doc/tigervnc/HOWTO.md for more information."
|
||||
EOF
|
||||
chmod +x %{buildroot}/%{_bindir}/vncserver
|
||||
|
||||
%find_lang %{name} %{name}.lang
|
||||
|
||||
@ -285,24 +274,40 @@ rm -f %{buildroot}%{_libdir}/xorg/modules/extensions/libvnc.la
|
||||
rm -f %{buildroot}%{_libdir}/xorg/modules/extensions/libvnc.so
|
||||
%else
|
||||
mkdir -p %{buildroot}%{_sysconfdir}/X11/xorg.conf.d/
|
||||
install -m 644 %{SOURCE4} %{buildroot}%{_sysconfdir}/X11/xorg.conf.d/10-libvnc.conf
|
||||
install -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/X11/xorg.conf.d/10-libvnc.conf
|
||||
%endif
|
||||
|
||||
install -m 644 %{SOURCE4} %{buildroot}/%{_docdir}/tigervnc/HOWTO.md
|
||||
|
||||
%post server
|
||||
%systemd_post vncserver.service
|
||||
%systemd_post xvnc.service
|
||||
%systemd_post xvnc.socket
|
||||
|
||||
%preun server
|
||||
%systemd_preun vncserver.service
|
||||
%systemd_preun xvnc.service
|
||||
%systemd_preun xvnc.socket
|
||||
|
||||
%postun server
|
||||
%systemd_postun vncserver.service
|
||||
%systemd_postun xvnc.service
|
||||
%systemd_postun xvnc.socket
|
||||
|
||||
%pre selinux
|
||||
%selinux_relabel_pre
|
||||
|
||||
%post selinux
|
||||
%selinux_modules_install %{_datadir}/selinux/packages/vncsession.pp
|
||||
%selinux_relabel_post
|
||||
|
||||
%posttrans selinux
|
||||
%selinux_relabel_post
|
||||
|
||||
%postun selinux
|
||||
%selinux_modules_uninstall vncsession
|
||||
if [ $1 -eq 0 ]; then
|
||||
%selinux_relabel_post
|
||||
fi
|
||||
|
||||
|
||||
%files -f %{name}.lang
|
||||
%doc README.rst
|
||||
%{_bindir}/vncviewer
|
||||
@ -310,16 +315,22 @@ install -m 644 %{SOURCE4} %{buildroot}%{_sysconfdir}/X11/xorg.conf.d/10-libvnc.c
|
||||
%{_mandir}/man1/vncviewer.1*
|
||||
|
||||
%files server
|
||||
%config(noreplace) %{_sysconfdir}/sysconfig/vncservers
|
||||
%{_userunitdir}/vncserver@.service
|
||||
%config(noreplace) %{_sysconfdir}/pam.d/tigervnc
|
||||
%config(noreplace) %{_sysconfdir}/tigervnc/vncserver-config-defaults
|
||||
%config(noreplace) %{_sysconfdir}/tigervnc/vncserver-config-mandatory
|
||||
%config(noreplace) %{_sysconfdir}/tigervnc/vncserver.users
|
||||
%{_unitdir}/vncserver@.service
|
||||
%{_unitdir}/xvnc@.service
|
||||
%{_unitdir}/xvnc.socket
|
||||
%{_bindir}/x0vncserver
|
||||
%{_bindir}/vncserver
|
||||
%{_bindir}/vncserver_wrapper
|
||||
%{_mandir}/man1/vncserver.1*
|
||||
%{_sbindir}/vncsession
|
||||
%{_libexecdir}/vncserver
|
||||
%{_libexecdir}/vncsession-start
|
||||
%{_mandir}/man1/x0vncserver.1*
|
||||
%{_mandir}/man8/vncserver.8*
|
||||
%{_mandir}/man8/vncsession.8*
|
||||
%{_docdir}/tigervnc/HOWTO.md
|
||||
|
||||
%files server-minimal
|
||||
%{_bindir}/vncconfig
|
||||
@ -335,17 +346,45 @@ install -m 644 %{SOURCE4} %{buildroot}%{_sysconfdir}/X11/xorg.conf.d/10-libvnc.c
|
||||
%config %{_sysconfdir}/X11/xorg.conf.d/10-libvnc.conf
|
||||
%endif
|
||||
|
||||
%files server-applet
|
||||
%doc java/com/tigervnc/vncviewer/README
|
||||
%{_datadir}/vnc/classes/*
|
||||
|
||||
%files license
|
||||
%license LICENCE.TXT
|
||||
%{_docdir}/tigervnc/LICENCE.TXT
|
||||
|
||||
%files icons
|
||||
%{_datadir}/icons/hicolor/*/apps/*
|
||||
|
||||
%files selinux
|
||||
%{_datadir}/selinux/packages/vncsession.pp
|
||||
|
||||
|
||||
%changelog
|
||||
* Thu Jun 25 2020 Jan Grulich <jgrulich@redhat.com> - 1.10.1-5
|
||||
- Install the HOWTO file to correct location
|
||||
- Add /usr/bin/vncserver file informing users to read the HOWTO.md file
|
||||
Resolves: bz#1790443
|
||||
|
||||
* Mon Jun 15 2020 Jan Grulich <jgrulich@redhat.com> - 1.10.1-4
|
||||
- Improve SELinux policy
|
||||
Resolves: bz#1790443
|
||||
|
||||
* Mon Jun 15 2020 Jan Grulich <jgrulich@redhat.com> - 1.10.1-3
|
||||
- Add a HOWTO.md file with instructions how to start VNC server
|
||||
Resolves: bz#1790443
|
||||
|
||||
* Tue May 26 2020 Jan Grulich <jgrulich@redhat.com> - 1.10.1-2
|
||||
- Make the systemd service run also for root user
|
||||
Resolves: bz#1790443
|
||||
|
||||
* Mon Apr 27 2020 Jan Grulich <jgrulich@redhat.com> - 1.10.1-1
|
||||
- Update to 1.10.1
|
||||
Resolves: bz#1806992
|
||||
|
||||
- Add proper systemd support
|
||||
Resolves: bz#1790443
|
||||
|
||||
* Tue Jan 28 2020 Jan Grulich <jgrulich@redhat.com> - 1.9.0-13
|
||||
- Bump build because of z-stream
|
||||
Resolves: bz#1671714
|
||||
|
||||
* Wed Dec 11 2019 Jan Grulich <jgrulich@redhat.com> - 1.9.0-12
|
||||
- Fix installation of systemd files
|
||||
Resolves: bz#1671714
|
||||
|
Loading…
Reference in New Issue
Block a user