x11vnc: Add "sendbell" remote cmd. Fix copyrect updates under

-reflect.  Workaround that checks valid window of selection
requestor.  Wait on some ssl helper pids earlier.  Workaround
XAUTHLOCALHOSTNAME for some new usage modes.  Set fake fb to
requested bpp with correct masks.  -padgeom once:... mode.
Set LIBXCB_ALLOW_SLOPPY_LOCK by default. rfbRandomBytes earlier.
classes/ssl: Update jars.  Add "TOP_" dropdown customization to
ultravnc java viewer applet FTP panel.
pull/1/head
runge 15 years ago
parent 3998c18e26
commit e59f78c5ea

@ -243,6 +243,16 @@ UltraVNC Java viewer only:
Home.Desktop.bin_2F_linux
If an item is prefixed with "TOP_" then the item is inserted at
the top of the drop down rather than being appended to the end.
E.g. to try to initially load the user homedir instead of /:
TOP_Home.My+Documents.Desktop
If ftpDropDown is set to the empty string, "", then no special
locations, [Desktop] etc., are placed in the drop down. Only the
ultravnc "drives" will appear.
ftpOnly
yes/no, default: no
The VNC viewer only shows the filetransfer panel, no desktop

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -121,7 +121,7 @@ diff -Naur JavaViewer.orig/ButtonPanel.java JavaViewer/ButtonPanel.java
}
diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
--- JavaViewer.orig/FTPFrame.java 2005-03-15 23:53:14.000000000 -0500
+++ JavaViewer/FTPFrame.java 2009-01-11 12:10:06.000000000 -0500
+++ JavaViewer/FTPFrame.java 2009-01-13 09:48:30.000000000 -0500
@@ -24,8 +24,17 @@
import java.io.*;
import java.util.ArrayList;
@ -244,7 +244,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
// Loop through the string to create a String[]
for (int i = 0; i < size; i = i + 3) {
@@ -150,26 +231,62 @@
@@ -150,26 +231,68 @@
driveType = str.substring(i + 2, i + 3);
if (driveType.compareTo("f") == 0)
drive[i / 3] += "\\ Floppy";
@ -272,7 +272,13 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
+ String[] dd = viewer.ftpDropDown.split("\\.");
+ for (int i=0; i < dd.length; i++) {
+ if (!dd[i].equals("")) {
+ remoteDrivesComboBox.addItem(" [" + dd[i] + "]");
+ String s = dd[i];
+ if (s.startsWith("TOP_")) {
+ s = s.substring(4);
+ remoteDrivesComboBox.insertItemAt(" [" + s + "]", 0);
+ } else {
+ remoteDrivesComboBox.addItem(" [" + s + "]");
+ }
+ }
+ }
+ } else {
@ -313,7 +319,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
updateDriveList = false;
return drive;
}
@@ -185,6 +302,8 @@
@@ -185,6 +308,8 @@
stopButton.setVisible(true);
stopButton.setEnabled(true);
receiveButton.setEnabled(false);
@ -322,7 +328,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
remoteTopButton.setEnabled(false);
sendButton.setEnabled(false);
remoteFileTable.setEnabled(false);
@@ -207,6 +326,8 @@
@@ -207,6 +332,8 @@
stopButton.setVisible(false);
stopButton.setEnabled(false);
receiveButton.setEnabled(true);
@ -331,7 +337,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
remoteTopButton.setEnabled(true);
sendButton.setEnabled(true);
remoteFileTable.setEnabled(true);
@@ -221,10 +342,11 @@
@@ -221,10 +348,11 @@
/*
* Print Directory prints out all the contents of a directory
*/
@ -344,7 +350,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
remoteFileTable.setListData(remoteList);
}
@@ -235,10 +357,12 @@
@@ -235,10 +363,12 @@
* @return void
*/
private void initialize() {
@ -358,7 +364,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
/**
* This method initializes jContentPane. This is the main content pane
*
@@ -253,6 +377,33 @@
@@ -253,6 +383,33 @@
jContentPane.add(getRemotePanel(), java.awt.BorderLayout.EAST);
jContentPane.add(getLocalPanel(), java.awt.BorderLayout.WEST);
jContentPane.add(getButtonPanel(), java.awt.BorderLayout.CENTER);
@ -392,7 +398,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return jContentPane;
}
@@ -270,6 +421,7 @@
@@ -270,6 +427,7 @@
topPanelLocal.add(getLocalMachineLabel(), java.awt.BorderLayout.CENTER);
topPanelLocal.add(getLocalTopButton(), java.awt.BorderLayout.EAST);
topPanelLocal.setBackground(java.awt.Color.lightGray);
@ -400,7 +406,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return topPanelLocal;
}
@@ -288,6 +440,7 @@
@@ -288,6 +446,7 @@
topPanelRemote.add(getRemoteMachineLabel(), java.awt.BorderLayout.CENTER);
topPanelRemote.add(getRemoteTopButton(), java.awt.BorderLayout.EAST);
topPanelRemote.setBackground(java.awt.Color.lightGray);
@ -408,7 +414,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return topPanelRemote;
}
@@ -301,6 +454,7 @@
@@ -301,6 +460,7 @@
if (topPanelCenter == null) {
topPanelCenter = new javax.swing.JPanel();
topPanelCenter.add(getDummyButton(), null);
@ -416,7 +422,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return topPanelCenter;
}
@@ -328,6 +482,7 @@
@@ -328,6 +488,7 @@
topPanel.add(getRemoteTopButton(), null);
topPanel.setBackground(java.awt.Color.lightGray);
*/
@ -424,7 +430,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return topPanel;
}
@@ -348,6 +503,7 @@
@@ -348,6 +509,7 @@
statusPanel.add(getJProgressBar(), null);
statusPanel.add(getConnectionStatus(), null);
statusPanel.setBackground(java.awt.Color.lightGray);
@ -432,7 +438,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return statusPanel;
@@ -368,6 +524,7 @@
@@ -368,6 +530,7 @@
remotePanel.add(getRemoteScrollPane(), null);
remotePanel.add(getRemoteStatus(), null);
remotePanel.setBackground(java.awt.Color.lightGray);
@ -440,7 +446,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return remotePanel;
}
@@ -390,6 +547,7 @@
@@ -390,6 +553,7 @@
localPanel.setComponentOrientation(
java.awt.ComponentOrientation.UNKNOWN);
localPanel.setName("localPanel");
@ -448,7 +454,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return localPanel;
}
@@ -405,12 +563,15 @@
@@ -405,12 +569,15 @@
buttonPanel = new javax.swing.JPanel();
buttonPanel.setLayout(null);
buttonPanel.add(getReceiveButton(), null);
@ -464,7 +470,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return buttonPanel;
}
@@ -422,10 +583,11 @@
@@ -422,10 +589,11 @@
private javax.swing.JButton getSendButton() {
if (sendButton == null) {
sendButton = new javax.swing.JButton();
@ -477,7 +483,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return sendButton;
@@ -438,7 +600,7 @@
@@ -438,7 +606,7 @@
private javax.swing.JButton getReceiveButton() {
if (receiveButton == null) {
receiveButton = new javax.swing.JButton();
@ -486,7 +492,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
receiveButton.setText("<< Receive");
receiveButton.setName("receiveButton");
receiveButton.addActionListener(this);
@@ -453,7 +615,7 @@
@@ -453,7 +621,7 @@
private javax.swing.JButton getDeleteButton() {
if (deleteButton == null) {
deleteButton = new javax.swing.JButton();
@ -495,7 +501,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
deleteButton.setText("Delete File");
deleteButton.setName("deleteButton");
deleteButton.addActionListener(this);
@@ -468,7 +630,7 @@
@@ -468,7 +636,7 @@
private javax.swing.JButton getNewFolderButton() {
if (newFolderButton == null) {
newFolderButton = new javax.swing.JButton();
@ -504,7 +510,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
newFolderButton.setText("New Folder");
newFolderButton.setName("newFolderButton");
newFolderButton.addActionListener(this);
@@ -476,6 +638,39 @@
@@ -476,6 +644,39 @@
return newFolderButton;
}
@ -544,7 +550,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
/**
* This method initializes stopButton
*
@@ -486,7 +681,7 @@
@@ -486,7 +687,7 @@
if (stopButton == null)
{
stopButton = new javax.swing.JButton();
@ -553,7 +559,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
stopButton.setText("Stop");
stopButton.setName("stopButton");
stopButton.addActionListener(this);
@@ -503,8 +698,12 @@
@@ -503,8 +704,12 @@
private javax.swing.JButton getCloseButton() {
if (closeButton == null) {
closeButton = new javax.swing.JButton();
@ -568,7 +574,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
closeButton.setName("closeButton");
closeButton.addActionListener(this);
}
@@ -551,6 +750,7 @@
@@ -551,6 +756,7 @@
//Select the second entry (e.g. C:\)
// localDrivesComboBox.setSelectedIndex(1);
localDrivesComboBox.addActionListener(this);
@ -576,7 +582,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
updateDriveList = false;
return localDrivesComboBox;
@@ -567,6 +767,7 @@
@@ -567,6 +773,7 @@
remoteDrivesComboBox.setFont(
new java.awt.Font("Dialog", java.awt.Font.PLAIN, 10));
remoteDrivesComboBox.addActionListener(this);
@ -584,7 +590,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return remoteDrivesComboBox;
@@ -587,6 +788,7 @@
@@ -587,6 +794,7 @@
localMachineLabel.setFont(
new java.awt.Font("Dialog", java.awt.Font.BOLD, 11));
localMachineLabel.setEditable(false);
@ -592,7 +598,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return localMachineLabel;
}
@@ -622,6 +824,7 @@
@@ -622,6 +830,7 @@
localTopButton.setFont(
new java.awt.Font("Dialog", java.awt.Font.BOLD, 10));
localTopButton.addActionListener(this);
@ -600,7 +606,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return localTopButton;
}
@@ -638,6 +841,7 @@
@@ -638,6 +847,7 @@
remoteTopButton.setFont(
new java.awt.Font("Dialog", java.awt.Font.BOLD, 10));
remoteTopButton.addActionListener(this);
@ -608,7 +614,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return remoteTopButton;
}
@@ -650,9 +854,24 @@
@@ -650,9 +860,24 @@
private javax.swing.JList getLocalFileTable() {
if (localFileTable == null) {
localList = new Vector(0);
@ -633,7 +639,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return localFileTable;
}
@@ -669,6 +888,7 @@
@@ -669,6 +894,7 @@
localScrollPane.setFont(
new java.awt.Font("Dialog", java.awt.Font.PLAIN, 10));
localScrollPane.setName("localFileList");
@ -641,7 +647,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return localScrollPane;
}
@@ -680,10 +900,25 @@
@@ -680,10 +906,25 @@
private javax.swing.JList getRemoteFileTable() {
if (remoteFileTable == null) {
remoteList = new Vector(0);
@ -667,7 +673,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return remoteFileTable;
@@ -698,6 +933,7 @@
@@ -698,6 +939,7 @@
remoteScrollPane = new javax.swing.JScrollPane();
remoteScrollPane.setViewportView(getRemoteFileTable());
remoteScrollPane.setPreferredSize(new java.awt.Dimension(325, 418));
@ -675,7 +681,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return remoteScrollPane;
}
@@ -716,6 +952,7 @@
@@ -716,6 +958,7 @@
remoteLocation.setBackground(new Color(255,255,238));
remoteLocation.setFont(
new java.awt.Font("Dialog", java.awt.Font.PLAIN, 10));
@ -683,7 +689,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return remoteLocation;
}
@@ -732,6 +969,7 @@
@@ -732,6 +975,7 @@
localLocation.setBackground( new Color(255,255,238));
localLocation.setFont(
new java.awt.Font("Dialog", java.awt.Font.PLAIN, 10));
@ -691,7 +697,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return localLocation;
}
@@ -748,6 +986,7 @@
@@ -748,6 +992,7 @@
localStatus.setFont(
new java.awt.Font("Dialog", java.awt.Font.PLAIN, 10));
localStatus.setEditable(false);
@ -699,7 +705,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return localStatus;
}
@@ -764,6 +1003,7 @@
@@ -764,6 +1009,7 @@
remoteStatus.setFont(
new java.awt.Font("Dialog", java.awt.Font.PLAIN, 10));
remoteStatus.setEditable(false);
@ -707,7 +713,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return remoteStatus;
}
@@ -777,9 +1017,10 @@
@@ -777,9 +1023,10 @@
historyComboBox = new javax.swing.JComboBox();
historyComboBox.setFont(
new java.awt.Font("Dialog", java.awt.Font.BOLD, 10));
@ -719,7 +725,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return historyComboBox;
}
@@ -791,6 +1032,7 @@
@@ -791,6 +1038,7 @@
private javax.swing.JProgressBar getJProgressBar() {
if (jProgressBar == null) {
jProgressBar = new javax.swing.JProgressBar();
@ -727,7 +733,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
return jProgressBar;
}
@@ -806,6 +1048,7 @@
@@ -806,6 +1054,7 @@
connectionStatus.setBackground(java.awt.Color.lightGray);
connectionStatus.setFont(
new java.awt.Font("Dialog", java.awt.Font.PLAIN, 10));
@ -735,7 +741,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
connectionStatus.setEditable(false);
return connectionStatus;
@@ -815,7 +1058,12 @@
@@ -815,7 +1064,12 @@
* Implements Action listener.
*/
public void actionPerformed(ActionEvent evt) {
@ -749,7 +755,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
if (evt.getSource() == closeButton)
{ // Close Button
@@ -829,15 +1077,27 @@
@@ -829,15 +1083,27 @@
{
doReceive();
}
@ -779,7 +785,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
else if (evt.getSource() == localTopButton)
{
@@ -845,12 +1105,17 @@
@@ -845,12 +1111,17 @@
}
else if (evt.getSource() == remoteTopButton)
{
@ -797,7 +803,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
else if(evt.getSource()==newFolderButton)
{
doNewFolder();
@@ -864,7 +1129,7 @@
@@ -864,7 +1135,7 @@
private void doNewFolder()
{
@ -806,7 +812,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
if(selectedTable.equals("remote"))
{
name = remoteLocation.getText()+name;
@@ -880,34 +1145,106 @@
@@ -880,34 +1151,106 @@
historyComboBox.setSelectedIndex(0);
}
}
@ -923,7 +929,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
return;
}
@@ -916,7 +1253,7 @@
@@ -916,7 +1259,7 @@
// sf@2004 - Delete prompt
if (remoteList.contains(sFileName))
{
@ -932,7 +938,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
if (r == JOptionPane.NO_OPTION)
return;
}
@@ -926,18 +1263,22 @@
@@ -926,18 +1269,22 @@
}
else
{
@ -958,7 +964,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
if (r == JOptionPane.NO_OPTION)
return;
}
@@ -952,21 +1293,25 @@
@@ -952,21 +1299,25 @@
private void doReceive()
{
@ -988,7 +994,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
if (r == JOptionPane.NO_OPTION)
return;
}
@@ -979,23 +1324,101 @@
@@ -979,23 +1330,101 @@
viewer.rfb.requestRemoteFile(remoteFileName,localDestinationPath);
}
@ -1094,7 +1100,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
if (r == JOptionPane.NO_OPTION)
return;
}
@@ -1013,6 +1436,7 @@
@@ -1013,6 +1442,7 @@
//
private void doStop()
{
@ -1102,7 +1108,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
viewer.rfb.fAbort = true;
}
/**
@@ -1024,6 +1448,14 @@
@@ -1024,6 +1454,14 @@
System.out.println("History: " + message);
historyComboBox.insertItemAt(new String(message), 0);
}
@ -1117,7 +1123,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
/**
* This method updates the file table to the current selection of the remoteComboBox
@@ -1034,11 +1466,44 @@
@@ -1034,11 +1472,44 @@
remoteSelection = null;
if (!updateDriveList) {
@ -1165,7 +1171,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
remoteFileTable.setListData(remoteList);
}
/**
@@ -1048,6 +1513,7 @@
@@ -1048,6 +1519,7 @@
private void changeLocalDrive()
{
File currentDrive = new File(localDrivesComboBox.getSelectedItem().toString());
@ -1173,7 +1179,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
if(currentDrive.canRead())
{
localSelection = null;
@@ -1057,9 +1523,11 @@
@@ -1057,9 +1529,11 @@
else
{
localList.clear();
@ -1185,7 +1191,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
/**
* Determines which FileTable was double-clicked and updates the table
@@ -1098,10 +1566,18 @@
@@ -1098,10 +1572,18 @@
selectedTable = "remote";
localFileTable.setBackground(new Color(238, 238, 238));
remoteFileTable.setBackground(new Color(255, 255, 255));
@ -1206,7 +1212,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
/*
@@ -1115,10 +1591,38 @@
@@ -1115,10 +1597,38 @@
localFileTable.setBackground(new Color(255, 255, 255));
File currentSelection = new File(currentLocalDirectory, getTrimmedSelection());
@ -1246,7 +1252,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
/**
* Updates the Remote File Table based on selection. Called from mouseClicked handler
*/
@@ -1126,20 +1630,29 @@
@@ -1126,20 +1636,29 @@
String name = null;
String action = null;
String drive = null;
@ -1278,7 +1284,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
remoteFileTable.setListData(remoteList);
}
else if (!name.substring(0, 2).equals(" [") && !name.substring((name.length() - 1), name.length()).equals("]"))
@@ -1149,6 +1662,7 @@
@@ -1149,6 +1668,7 @@
remoteSelection = remoteLocation.getText() + name.substring(0, name.length());
drive = remoteLocation.getText();
// ??
@ -1286,7 +1292,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
else
{
@@ -1159,10 +1673,12 @@
@@ -1159,10 +1679,12 @@
remoteLocation.setText(drive);
viewer.rfb.readServerDirectory(drive);
remoteList.clear();
@ -1299,7 +1305,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
/**
* Updates the Local File Table based on selection. Called from MouseClicked handler
*/
@@ -1188,6 +1704,7 @@
@@ -1188,6 +1710,7 @@
else if (currentSelection.isFile())
{
localSelection = currentSelection.getAbsoluteFile();
@ -1307,7 +1313,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
else if (currentSelection.isDirectory())
{
@@ -1201,13 +1718,22 @@
@@ -1201,13 +1724,22 @@
*
*/
private String getTrimmedSelection(){
@ -1337,7 +1343,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
}
/*
@@ -1241,36 +1767,148 @@
@@ -1241,36 +1773,148 @@
return null;
}
@ -1494,7 +1500,7 @@ diff -Naur JavaViewer.orig/FTPFrame.java JavaViewer/FTPFrame.java
FilesList.clear();
DirsList.clear();
@@ -1296,3 +1934,147 @@
@@ -1296,3 +1940,147 @@
}
} // @jve:visual-info decl-index=0 visual-constraint="10,10"

@ -1,3 +1,13 @@
2009-02-03 Karl Runge <runge@karlrunge.com>
* x11vnc: Add "sendbell" remote cmd. Fix copyrect updates under
-reflect. Workaround that checks valid window of selection
requestor. Wait on some ssl helper pids earlier. Workaround
XAUTHLOCALHOSTNAME for some new usage modes. Set fake fb to
requested bpp with correct masks. -padgeom once:... mode.
Set LIBXCB_ALLOW_SLOPPY_LOCK by default. rfbRandomBytes earlier.
* classes/ssl: Update jars. Add "TOP_" dropdown customization to
ultravnc java viewer applet FTP panel.
2009-01-11 Karl Runge <runge@karlrunge.com>
* classes/ssl: Add configurable Ultra java applet Filexfer Drives
drop down (e.g. ftpDropDown=Home.Desktop.bin). Document all

File diff suppressed because it is too large Load Diff

@ -52,7 +52,7 @@ void print_help(int mode) {
"Also, use of a VNC password (-rfbauth or -passwdfile) is strongly recommended.\n"
"\n"
"For additional info see: http://www.karlrunge.com/x11vnc/\n"
" and http://www.karlrunge.com/x11vnc/#faq\n"
" and http://www.karlrunge.com/x11vnc/faq.html\n"
"\n"
"\n"
"Config file support: if the file $HOME/.x11vncrc exists then each line in\n"
@ -1343,10 +1343,11 @@ void print_help(int mode) {
" The VNC Viewer-side needs to support SSL/TLS as well.\n"
" See this URL and also the discussion below for\n"
" ideas on how to enable SSL support for the viewer:\n"
" http://www.karlrunge.com/x11vnc/#faq-ssl-tunnel-viewers\n"
" x11vnc provides an SSL enabled Java viewer applet in\n"
" the classes/ssl directory (-http or -httpdir options.)\n"
" The SSVNC viewer package supports SSL tunnels too.\n"
" http://www.karlrunge.com/x11vnc/faq.html#faq-ssl-tun\n"
" nel-viewers x11vnc provides an SSL enabled Java\n"
" viewer applet in the classes/ssl directory (-http or\n"
" -httpdir options.) The SSVNC viewer package supports\n"
" SSL tunnels too.\n"
"\n"
" If the VNC Viewer supports VeNCrypt or ANONTLS (vino's\n"
" encryption mode) they are also supported by the -ssl\n"
@ -2460,6 +2461,10 @@ void print_help(int mode) {
" to handle all subsequent resizes (e.g. under -xrandr,\n"
" -remote id:windowid, rescaling, etc.)\n"
"\n"
" In -unixpw mode this sets the size of the login screen.\n"
" Use \"once:WxH\" it ignore padgeom after the login\n"
" screen is set up.\n"
"\n"
"-o logfile Write stderr messages to file \"logfile\" instead of to\n"
" the terminal. Same as \"-logfile file\". To append\n"
" to the file use \"-oa file\" or \"-logappend file\".\n"
@ -4382,6 +4387,7 @@ void print_help(int mode) {
" fb disable -nofb mode.\n"
" bell enable bell (if supported).\n"
" nobell disable bell.\n"
" sendbell ring the bell now.\n"
" nosel enable -nosel mode.\n"
" sel disable -nosel mode.\n"
" noprimary enable -noprimary mode.\n"
@ -4914,7 +4920,7 @@ void xopen_display_fail_message(char *disp) {
fprintf(stderr, " change and the directory the cookie file resides in"
" is system dependent.\n");
fprintf(stderr, "\n");
fprintf(stderr, "See also: http://www.karlrunge.com/x11vnc/#faq\n");
fprintf(stderr, "See also: http://www.karlrunge.com/x11vnc/faq.html\n");
}
void nopassword_warning_msg(int gotloc) {
@ -4974,7 +4980,7 @@ void nopassword_warning_msg(int gotloc) {
"#@ Please Read the documention for more info about @#\n"
"#@ passwords, security, and encryption. @#\n"
"#@ @#\n"
"#@ http://www.karlrunge.com/x11vnc/#faq-passwd @#\n"
"#@ http://www.karlrunge.com/x11vnc/faq.html#faq-passwd @#\n"
;
char str3[] =
"#@ @#\n"

@ -2537,6 +2537,14 @@ char *process_remote_cmd(char *cmd, int stringonly) {
sound_bell = 0;
goto done;
}
if (!strcmp(p, "sendbell")) {
NOTAPP
rfbLog("remote_cmd: sendbell.\n");
if (screen && client_count) {
rfbSendBell(screen);
}
goto done;
}
if (!strcmp(p, "sel")) {
if (query) {
snprintf(buf, bufn, "ans=%s:%d", p, watch_selection);

@ -1004,6 +1004,48 @@ void vnc_reflect_got_cursorshape(rfbClient *cl, int xhot, int yhot, int width, i
set_cursor(cursor_x, cursor_y, get_which_cursor());
}
static void from_libvncclient_CopyRectangleFromRectangle(rfbClient* client, int src_x, int src_y, int w, int h, int dest_x, int dest_y) {
int i,j;
#define COPY_RECT_FROM_RECT(BPP) \
{ \
uint##BPP##_t* _buffer=((uint##BPP##_t*)client->frameBuffer)+(src_y-dest_y)*client->width+src_x-dest_x; \
if (dest_y < src_y) { \
for(j = dest_y*client->width; j < (dest_y+h)*client->width; j += client->width) { \
if (dest_x < src_x) { \
for(i = dest_x; i < dest_x+w; i++) { \
((uint##BPP##_t*)client->frameBuffer)[j+i]=_buffer[j+i]; \
} \
} else { \
for(i = dest_x+w-1; i >= dest_x; i--) { \
((uint##BPP##_t*)client->frameBuffer)[j+i]=_buffer[j+i]; \
} \
} \
} \
} else { \
for(j = (dest_y+h-1)*client->width; j >= dest_y*client->width; j-=client->width) { \
if (dest_x < src_x) { \
for(i = dest_x; i < dest_x+w; i++) { \
((uint##BPP##_t*)client->frameBuffer)[j+i]=_buffer[j+i]; \
} \
} else { \
for(i = dest_x+w-1; i >= dest_x; i--) { \
((uint##BPP##_t*)client->frameBuffer)[j+i]=_buffer[j+i]; \
} \
} \
} \
} \
}
switch(client->format.bitsPerPixel) {
case 8: COPY_RECT_FROM_RECT(8); break;
case 16: COPY_RECT_FROM_RECT(16); break;
case 32: COPY_RECT_FROM_RECT(32); break;
default:
rfbClientLog("Unsupported bitsPerPixel: %d\n",client->format.bitsPerPixel);
}
}
void vnc_reflect_got_copyrect(rfbClient *cl, int src_x, int src_y, int w, int h, int dest_x, int dest_y) {
sraRegionPtr reg;
int dx, dy, rc = -1;
@ -1021,13 +1063,15 @@ void vnc_reflect_got_copyrect(rfbClient *cl, int src_x, int src_y, int w, int h,
if (dx != last_dx || dy != last_dy) {
rc = fb_push_wait(0.05, FB_COPY|FB_MOD);
}
if (0) fprintf(stderr, "vnc_reflect_got_copyrect: %dx%d+%d+%d %d %d rc=%d\n", dest_x, dest_y, w, h, dx, dy, rc);
if (1) fprintf(stderr, "vnc_reflect_got_copyrect: %03dx%03d+%03d+%03d %3d %3d rc=%d\n", dest_x, dest_y, w, h, dx, dy, rc);
reg = sraRgnCreateRect(dest_x, dest_y, dest_x + w, dest_y + h);
do_copyregion(reg, dx, dy, 0);
sraRgnDestroy(reg);
last_dx = dx;
last_dy = dy;
from_libvncclient_CopyRectangleFromRectangle(cl, src_x, src_y, w, h, dest_x, dest_y);
}
rfbBool vnc_reflect_resize(rfbClient *cl) {

@ -169,11 +169,38 @@ void selection_request(XEvent *ev, char *type) {
}
if (! trapped_xerror) {
int ret = XSendEvent(req_event->display, req_event->requestor, False, 0,
(XEvent *)&notify_event);
int ret = -2, skip_it = 0, ms = 0;
double now = dnow();
static double last_check = 0.0;
if (now > last_check + 0.2) {
XFlush_wr(dpy);
if (!valid_window(req_event->requestor , NULL, 1)) {
sync_it = 1;
skip_it = 1;
if (debug_sel) {
rfbLog("selection_request: not a valid window: 0x%x\n",
req_event->requestor);
}
ms = 10;
}
if (trapped_xerror) {
sync_it = 1;
skip_it = 1;
}
last_check = dnow();
}
if (!skip_it) {
ret = XSendEvent(req_event->display, req_event->requestor, False, 0,
(XEvent *)&notify_event);
}
if (debug_sel) {
rfbLog("XSendEvent() -> %d\n", ret);
}
if (ms > 0) {
usleep(ms * 1000);
}
}
if (trapped_xerror) {
rfbLog("selection_request: ignored XError while sending "
@ -182,7 +209,7 @@ void selection_request(XEvent *ev, char *type) {
XFlush_wr(dpy);
if (sync_it) {
usleep(5 * 1000);
usleep(10 * 1000);
XSync(dpy, False);
}

@ -1248,18 +1248,23 @@ void ssl_helper_pid(pid_t pid, int sock) {
# define HPSIZE 256
static pid_t helpers[HPSIZE];
static int sockets[HPSIZE], first = 1;
int i, empty, set, status, db = 0;
int i, empty, set, status;
static int db = 0;
if (first) {
for (i=0; i < HPSIZE; i++) {
helpers[i] = 0;
sockets[i] = 0;
}
if (getenv("SSL_HELPER_PID_DB")) {
db = 1;
}
first = 0;
}
if (pid == 0) {
/* killall */
/* killall or waitall */
for (i=0; i < HPSIZE; i++) {
if (helpers[i] == 0) {
sockets[i] = -1;
@ -1279,13 +1284,17 @@ void ssl_helper_pid(pid_t pid, int sock) {
}
#if LIBVNCSERVER_HAVE_SYS_WAIT_H && LIBVNCSERVER_HAVE_WAITPID
if (db) fprintf(stderr, "waitpid(%d)\n", helpers[i]);
wret = waitpid(helpers[i], &status, WNOHANG);
if (db) fprintf(stderr, "waitpid(%d)\n", helpers[i]);
if (db) fprintf(stderr, " waitret1=%d\n", wret);
if (kret == 0 && wret != helpers[i]) {
int k;
for (k=0; k < 10; k++) {
usleep(100 * 1000);
wret = waitpid(helpers[i], &status, WNOHANG);
if (db) fprintf(stderr, " waitret2=%d\n", wret);
if (wret == helpers[i]) {
break;
}
@ -1310,10 +1319,12 @@ if (db) fprintf(stderr, "ssl_helper_pid(%d, %d)\n", pid, sock);
for (i=0; i < HPSIZE; i++) {
if (helpers[i] == pid) {
if (sock == -1) {
#if LIBVNCSERVER_HAVE_SYS_WAIT_H && LIBVNCSERVER_HAVE_WAITPID
pid_t wret;
wret = waitpid(helpers[i], &status, WNOHANG);
if (db) fprintf(stderr, "waitpid(%d) 2\n", helpers[i]);
waitpid(helpers[i], &status, WNOHANG);
if (db) fprintf(stderr, " waitret1=%d\n", wret);
#endif
helpers[i] = 0;
}
@ -2456,6 +2467,7 @@ void accept_openssl(int mode, int presock) {
}
screen->port = origport;
rfbLog("SSL: guessing child https finished.\n");
ssl_helper_pid(0, -2);
if (mode == OPENSSL_INETD) {
clean_up_exit(1);
}
@ -2490,8 +2502,11 @@ void accept_openssl(int mode, int presock) {
}
rfbLog("SSL: OPENSSL_INETD guessing "
"child https finished.\n");
ssl_helper_pid(0, -2);
clean_up_exit(1);
}
/* this will actually only get earlier https */
ssl_helper_pid(0, -2);
return;
}
kill(pid, SIGTERM);
@ -3522,6 +3537,8 @@ static void ssl_xfer(int csock, int s_in, int s_out, int is_https) {
} else {
tv_use = tv_vnc_later;
}
/* try to clean out some zombies if we can. */
ssl_helper_pid(0, -2);
}
if (ssl_timeout_secs > 0) {
tv_use = ssl_timeout_secs;
@ -3742,7 +3759,16 @@ void check_openssl(void) {
static double last_check = 0.0;
double now;
if (! use_openssl || openssl_sock < 0) {
if (! use_openssl) {
return;
}
if (time(NULL) > last_waitall + 120) {
last_waitall = time(NULL);
ssl_helper_pid(0, -2); /* waitall */
}
if (openssl_sock < 0) {
return;
}
@ -3752,11 +3778,6 @@ void check_openssl(void) {
}
last_check = now;
if (time(NULL) > last_waitall + 150) {
last_waitall = time(NULL);
ssl_helper_pid(0, -2); /* waitall */
}
FD_ZERO(&fds);
FD_SET(openssl_sock, &fds);
@ -3809,6 +3830,7 @@ void check_https(void) {
static void init_prng(void) {
int db = 0, bytes, ubytes, fd;
char file[MSZ], dtmp[100];
unsigned int sr;
RAND_file_name(file, MSZ);
@ -3838,6 +3860,9 @@ static void init_prng(void) {
RAND_poll();
}
RAND_bytes((unsigned char *)&sr, 4);
srand(sr);
if (bytes > 0) {
if (! quiet) {
rfbLog("initialized PRNG with %d random bytes.\n",

@ -798,6 +798,9 @@ char find_display[] =
" exit 1\n"
"fi\n"
"\n"
"LC_ALL=C\n"
"export LC_ALL\n"
"\n"
"# util to try to match a display with a Linux VT and print\n"
"# disp,VT=... etc. Otherwise just print out display.\n"
"#\n"
@ -980,19 +983,21 @@ char find_display[] =
"list=\"$list \"`who 2>/dev/null | grep \"^${user}[ ]\" | awk '{print $NF}' | grep '(:[0-9]' | sed -e 's/[()]//g'`\n"
"host=`hostname 2>/dev/null | sed -e 's/\\..*$//'`\n"
"\n"
"got_local_dm_file=\"\"\n"
"\n"
"if [ \"X$X11VNC_FINDDISPLAY_SKIP_XAUTH\" = \"X\" ]; then\n"
" # do a normal xauth list:\n"
" list=\"$list \"`xauth list | awk '{print $1}' | grep /unix | grep \"^${host}\" | sed -e 's/^.*:/:/' | sort -n | uniq`\n"
"\n"
" # check for gdm and kdm non-NFS cookies in /tmp:\n"
" for xa in /tmp/.gdm* /tmp/.Xauth*\n"
" # check for gdm and kdm non-NFS cookies in /tmp: (and now /var/run/gdm)\n"
" for xa in /tmp/.gdm* /tmp/.Xauth* /var/run/gdm/auth-for-*/database /var/run/gdm/auth-cookie-*-for-*\n"
" do\n"
" # try to be somewhat careful about the real owner of the file:\n"
" if id | sed -e 's/ gid.*$//' | grep -w root > /dev/null; then\n"
" break\n"
" fi\n"
" if [ -f $xa -a -r $xa ]; then\n"
" if ls -l \"$xa\" | sed -e 's,/tmp.*$,,' | grep -w \"$user\" > /dev/null; then\n"
" if ls -l \"$xa\" | sed -e 's,/tmp.*$,,' -e 's,/var.*$,,' | grep -w \"$user\" > /dev/null; then\n"
" # append these too:\n"
" if find \"$xa\" -user \"$user\" -perm 600 > /dev/null; then\n"
" :\n"
@ -1000,7 +1005,12 @@ char find_display[] =
" continue\n"
" fi\n"
" # it passes the ownership tests, add it:\n"
" list=\"$list \"`xauth -f \"$xa\" list | awk '{print $1}' | grep /unix | grep \"^${host}\" | sed -e 's/^.*:/:/' | sort -n | uniq | sed -e \"s,\\$,\\,$xa,\"`\n"
" # since the directory is (evidently) local, \"localhost\" is good too. (but beware XAUTHLOCALHOSTNAME in libxcb)\n"
" sav0=\"$list \"\n"
" list=\"$list \"`xauth -f \"$xa\" list | awk '{print $1}' | grep /unix | egrep -i \"^${host}|^localhost\" | sed -e 's/^.*:/:/' | sort -n | uniq | sed -e \"s,\\$,\\,$xa,\"`\n"
" if [ \"X$sav0\" != \"X$list\" ]; then\n"
" got_local_dm_file=1\n"
" fi\n"
" fi\n"
" fi\n"
" done\n"
@ -1073,10 +1083,6 @@ char find_display[] =
" if [ \"X$ok\" = \"X1\" ]; then\n"
" # ok, put it on the list\n"
" poss=\"$poss $p\"\n"
" if [ \"X$xa\" != \"X\" ]; then\n"
" # xauth file too, if applicable\n"
" poss=\"$poss,$xa\"\n"
" fi\n"
" fi\n"
"done\n"
"\n"
@ -1148,12 +1154,24 @@ char find_display[] =
"\n"
" # check xauth for it:\n"
" if [ \"X$xa\" != \"X\" ]; then\n"
" XAUTHORITY=\"$xa\" xdpyinfo -display \"$p\" >/dev/null 2>&1\n"
" myenv=\"XAUTHORITY=$xa\"\n"
" else\n"
" xdpyinfo -display \"$p\" >/dev/null 2>&1\n"
" myenv=\"FOO_BAR_=baz\"\n"
" fi\n"
" env \"$myenv\" xdpyinfo -display \"$p\" >/dev/null 2>&1\n"
" rc=$?\n"
" if [ $rc != 0 -a \"X$XAUTHLOCALHOSTNAME\" = \"X\" ]; then\n"
" # guard against libxcb/desktop silliness: \n"
" env \"$myenv\" XAUTHLOCALHOSTNAME=localhost xdpyinfo -display \"$p\" >/dev/null 2>&1\n"
" rc=$?\n"
" if [ $rc = 0 ]; then\n"
" # better export it for cmds below...\n"
" XAUTHLOCALHOSTNAME=localhost\n"
" export XAUTHLOCALHOSTNAME\n"
" fi\n"
" fi\n"
"\n"
" if [ $? = 0 ]; then\n"
" if [ $rc = 0 ]; then\n"
" if [ \"X$FD_TAG\" != \"X\" ]; then\n"
" # look for x11vnc special FD_TAG property:\n"
" if [ \"X$xa\" = \"X\" ]; then\n"
@ -1286,6 +1304,9 @@ char create_display[] =
"COLUMNS=256\n"
"export COLUMNS\n"
"\n"
"LC_ALL=C\n"
"export LC_ALL\n"
"\n"
"findfree() {\n"
" try=20\n"
" sry=99\n"

@ -16,6 +16,7 @@ extern char *crypt(const char*, const char *);
#include "connections.h"
#include "user.h"
#include "connections.h"
#include "sslhelper.h"
#include "cursor.h"
#include <rfb/default8x16.h>
@ -1518,6 +1519,8 @@ static void apply_opts (char *user) {
void unixpw_accept(char *user) {
apply_opts(user);
ssl_helper_pid(0, -2); /* waitall */
if (accept_cmd && strstr(accept_cmd, "popup") == accept_cmd) {
if (use_dpy && strstr(use_dpy, "WAIT:") == use_dpy &&
dpy == NULL) {

@ -13,6 +13,7 @@
#include "keyboard.h"
#include "cursor.h"
#include "remote.h"
#include "sslhelper.h"
#include "avahi.h"
void check_switched_user(void);
@ -590,6 +591,7 @@ static int guess_user_and_switch(char *str, int fb_mode) {
free(t);
continue;
}
if (switch_user(user, fb_mode)) {
rfbLog("switched to guessed user: %s\n", user);
free(t);
@ -684,6 +686,8 @@ int switch_user(char *user, int fb_mode) {
user++;
}
ssl_helper_pid(0, -2); /* waitall */
if (strstr(user, "guess=") == user) {
return guess_user_and_switch(user, fb_mode);
}
@ -1370,10 +1374,27 @@ static void setup_fake_fb(XImage* fb_image, int w, int h, int b) {
fb_image->bits_per_pixel = b;
fb_image->bytes_per_line = w*b/8;
fb_image->bitmap_unit = -1;
fb_image->depth = 24;
fb_image->red_mask = 0xff0000;
fb_image->green_mask = 0x00ff00;
fb_image->blue_mask = 0x0000ff;
if (b >= 24) {
fb_image->depth = 24;
fb_image->red_mask = 0xff0000;
fb_image->green_mask = 0x00ff00;
fb_image->blue_mask = 0x0000ff;
} else if (b >= 16) {
fb_image->depth = 16;
fb_image->red_mask = 0x003f;
fb_image->green_mask = 0x07c0;
fb_image->blue_mask = 0xf800;
} else if (b >= 2) {
fb_image->depth = 8;
fb_image->red_mask = 0x07;
fb_image->green_mask = 0x38;
fb_image->blue_mask = 0xc0;
} else {
fb_image->depth = 1;
fb_image->red_mask = 0x1;
fb_image->green_mask = 0x1;
fb_image->blue_mask = 0x1;
}
depth = fb_image->depth;
@ -2574,7 +2595,7 @@ int wait_for_client(int *argc, char** argv, int http) {
/* ugh, here we go... */
XImage* fb_image;
int w = 640, h = 480, b = 32;
int w0, h0, i, chg_raw_fb = 0;
int w0 = -1, h0 = -1, i, chg_raw_fb = 0;
char *str, *q, *cmd = NULL;
int db = 0, dt = 0;
char *create_cmd = NULL;
@ -2618,10 +2639,32 @@ int wait_for_client(int *argc, char** argv, int http) {
w = w0;
h = h0;
rfbLog("wait_for_client set: w=%d h=%d\n", w, h);
} else {
w0 = -1;
h0 = -1;
}
*q = ':';
str = q;
}
if ((w0 == -1 || h0 == -1) && pad_geometry != NULL) {
int b0, del = 0;
char *s = pad_geometry;
if (strstr(s, "once:") == s) {
del = 1;
s += strlen("once:");
}
if (sscanf(s, "%dx%dx%d", &w0, &h0, &b0) == 3) {
w = nabs(w0);
h = nabs(h0);
b = nabs(b0);
} else if (sscanf(s, "%dx%d", &w0, &h0) == 2) {
w = nabs(w0);
h = nabs(h0);
}
if (del) {
pad_geometry = NULL;
}
}
/* str currently begins with a ':' */
if (strstr(str, ":cmd=") == str) {

@ -9015,7 +9015,7 @@ if (ncdb && c) fprintf(stderr, "check_ncache purged %d events\n", c);
"If there are painting errors press 3 Alt_L's (Left \"Alt\" key) in a row to repaint the screen.",
white_pixel());
rfbDrawString(screen, &default8x16Font, dx, ds + Dy+6*dy,
"More info: http://www.karlrunge.com/x11vnc/#faq-client-caching",
"More info: http://www.karlrunge.com/x11vnc/faq.html#faq-client-caching",
white_pixel());
ds += 11 * dy;

@ -1,8 +1,8 @@
.\" This file was automatically generated from x11vnc -help output.
.TH X11VNC "1" "January 2009" "x11vnc " "User Commands"
.TH X11VNC "1" "February 2009" "x11vnc " "User Commands"
.SH NAME
x11vnc - allow VNC connections to real X11 displays
version: 0.9.7, lastmod: 2009-01-11
version: 0.9.7, lastmod: 2009-01-24
.SH SYNOPSIS
.B x11vnc
[OPTION]...
@ -40,7 +40,7 @@ ssh \fB-t\fR \fB-L\fR 5900:localhost:5900 far-host 'x11vnc \fB-localhost\fR \fB-
Also, use of a VNC password (-rfbauth or \fB-passwdfile)\fR is strongly recommended.
.PP
For additional info see: http://www.karlrunge.com/x11vnc/
and http://www.karlrunge.com/x11vnc/#faq
and http://www.karlrunge.com/x11vnc/faq.html
.PP
Config file support: if the file $HOME/.x11vncrc exists then each line in
it is treated as a single command line option. Disable with \fB-norc.\fR For
@ -1548,10 +1548,11 @@ is prescribed.
The VNC Viewer-side needs to support SSL/TLS as well.
See this URL and also the discussion below for
ideas on how to enable SSL support for the viewer:
http://www.karlrunge.com/x11vnc/#faq-ssl-tunnel-viewers
x11vnc provides an SSL enabled Java viewer applet in
the classes/ssl directory (-http or \fB-httpdir\fR options.)
The SSVNC viewer package supports SSL tunnels too.
http://www.karlrunge.com/x11vnc/faq.html#faq-ssl-tun
nel-viewers x11vnc provides an SSL enabled Java
viewer applet in the classes/ssl directory (-http or
\fB-httpdir\fR options.) The SSVNC viewer package supports
SSL tunnels too.
.IP
If the VNC Viewer supports VeNCrypt or ANONTLS (vino's
encryption mode) they are also supported by the \fB-ssl\fR
@ -2786,6 +2787,10 @@ that do not support NewFBSize and one wants to make
sure the initial viewer geometry will be big enough
to handle all subsequent resizes (e.g. under \fB-xrandr,\fR
\fB-remote\fR id:windowid, rescaling, etc.)
.IP
In \fB-unixpw\fR mode this sets the size of the login screen.
Use "once:WxH" it ignore padgeom after the login
screen is set up.
.PP
\fB-o\fR \fIlogfile\fR
.IP
@ -5164,6 +5169,8 @@ bell enable bell (if supported).
.IP
nobell disable bell.
.IP
sendbell ring the bell now.
.IP
nosel enable \fB-nosel\fR mode.
.IP
sel disable \fB-nosel\fR mode.

@ -1809,7 +1809,7 @@ char msg[] =
" 2) You can actually see the cached pixel data if you scroll down\n"
" to it in your viewer; adjust your viewer's size to hide it.\n"
"\n"
"More info: http://www.karlrunge.com/x11vnc/#faq-client-caching\n"
"More info: http://www.karlrunge.com/x11vnc/faq.html#faq-client-caching\n"
"\n"
"waiting for connections:\n"
;
@ -1824,7 +1824,7 @@ char msg2[] =
"\n"
" x11vnc -ncache 10 ...\n"
"\n"
"more info: http://www.karlrunge.com/x11vnc/#faq-client-caching\n"
"more info: http://www.karlrunge.com/x11vnc/faq.html#faq-client-caching\n"
"\n"
;
@ -3775,6 +3775,11 @@ int main(int argc, char* argv[]) {
}
}
if (! getenv("NO_LIBXCB_ALLOW_SLOPPY_LOCK")) {
/* libxcb is a bit too strict for us sometimes... */
set_env("LIBXCB_ALLOW_SLOPPY_LOCK", "1");
}
/* set OS struct UT */
uname(&UT);
@ -4167,6 +4172,14 @@ int main(int argc, char* argv[]) {
rfbLog("-passwd must be supplied when using -viewpasswd\n");
exit(1);
}
if (1) {
/* mix things up a little bit */
unsigned char buf[CHALLENGESIZE];
int k, kmax = (int) (500 * rfac()) + 100;
for (k=0; k < kmax; k++) {
rfbRandomBytes(buf);
}
}
if (SHOW_NO_PASSWORD_WARNING) {
char message[] = "-rfbauth, -passwdfile, -passwd password, "
@ -4943,7 +4956,7 @@ if (0) fprintf(stderr, "XA: %s\n", getenv("XAUTHORITY"));
rfbLog(" client sides. This mode works with any VNC viewer.\n");
rfbLog(" However, in most you can actually see the cached pixel\n");
rfbLog(" data by scrolling down, so you need to re-adjust its size.\n");
rfbLog(" See http://www.karlrunge.com/x11vnc/#faq-client-caching.\n");
rfbLog(" See http://www.karlrunge.com/x11vnc/faq.html#faq-client-caching.\n");
rfbLog(" If this mode yields undesired behavior (poor response,\n");
rfbLog(" painting errors, etc) it may be disabled via: '-ncache 0'\n");
rfbLog(" You can press 3 Alt_L's (Left \"Alt\" key) in a row to \n");

@ -15,7 +15,7 @@ int xtrap_base_event_type = 0;
int xdamage_base_event_type = 0;
/* date +'lastmod: %Y-%m-%d' */
char lastmod[] = "0.9.7 lastmod: 2009-01-11";
char lastmod[] = "0.9.7 lastmod: 2009-01-24";
/* X display info */

@ -1262,6 +1262,24 @@ Display *XOpenDisplay_wr(char *display_name) {
d = XOpenDisplay(display_name);
if (db) fprintf(stderr, "XOpenDisplay_wr: %s %p\n", display_name, (void *)d);
if (d == NULL) {
if (!getenv("NO_XAUTHLOCALHOSTNAME")) {
if (!getenv("XAUTHLOCALHOSTNAME")) {
rfbLog("XOpenDisplay(\"%s\") failed.\n",
display_name ? display_name : "");
rfbLog("Trying again with XAUTHLOCALHOSTNAME=localhost ...\n");
set_env("XAUTHLOCALHOSTNAME", "localhost");
d = XOpenDisplay(display_name);
if (0) {
char *ptr = getenv("XAUTHLOCALHOSTNAME");
if (ptr) {
*(ptr-2) = '_'; /* yow */
}
}
}
}
}
xauth_raw(0);
return d;

Loading…
Cancel
Save