Skip to content

Instantly share code, notes, and snippets.

@xbb
Last active November 29, 2023 15:20
Star You must be signed in to star a gist
Embed
What would you like to do?
IDRAC6 Virtual Console Launcher
Use this as an example on how to start the virtual console without the need of Java Web Start or accessing it from the web interface.
You can use the user and password that you use for the web interface.
You need an old JRE... I used 1.7.0_80 from the Server JRE package, also I have tested successfully 1.7.0_79 with MacOS.
You don't need to install it, just extract it or copy the files in "jre" folder.
Open the viewer.jnlp file that you get by launching the virtual console from the web interface with a text editor.
Note the urls to the jar files. Download the main jar file avctKVM.jar and the libs for your operating system and architecture.
Extract the dlls (.so Linux, .jnilib MacOS) from the jar libs.
If you don't see the MacOS libs in the file make sure you download it from MacOS.
Edit the bat/sh file according to your needs.
The file structure should look like this:
start-virtual-console.bat (.sh if Linux/MacOS)
avctKVM.jar
jre/<jre home here>
lib/avctKVMIO.dll (.so if Linux, .jnilib if MacOS)
lib/avmWinLib.dll (.so if Linux, .jnilib if MacOS)
@echo off
set /P drachost="Host: "
set /p dracuser="Username: "
set "psCommand=powershell -Command "$pword = read-host 'Enter Password' -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set dracpwd=%%p
.\jre\bin\java -cp avctKVM.jar -Djava.library.path=.\lib com.avocent.idrac.kvm.Main ip=%drachost% kmport=5900 vport=5900 user=%dracuser% passwd=%dracpwd% apcp=1 version=2 vmprivilege=true "helpurl=https://%drachost%:443/help/contents.html"
#!/bin/bash
echo -n 'Host: '
read drachost
echo -n 'Username: '
read dracuser
echo -n 'Password: '
read -s dracpwd
echo
./jre/bin/java -cp avctKVM.jar -Djava.library.path=./lib com.avocent.idrac.kvm.Main ip=$drachost kmport=5900 vport=5900 user=$dracuser passwd=$dracpwd apcp=1 version=2 vmprivilege=true "helpurl=https://$drachost:443/help/contents.html"
@f3rr311
Copy link

f3rr311 commented Jan 28, 2023

Does anyone have this running with the separate Java version so I do not need to modify my Java Config? Ifso can you please share the working files as the things in this thread do not seem to work properly at the time im posting this or if anyone is willing to help me diagnose the issue that is more familiar with Java that would be amazing.

I have 20 Servers we have running IDRAC6 and would like to be able to use the feature but DO NOT want to run a unsecured install of Java if we can start a portable version for this.

@jimfrench
Copy link

jimfrench commented Jan 29, 2023

Does anyone have this running with the separate Java version so I do not need to modify my Java Config? Ifso can you please share the working files as the things in this thread do not seem to work properly at the time im posting this or if anyone is willing to help me diagnose the issue that is more familiar with Java that would be amazing.

I have 20 Servers we have running IDRAC6 and would like to be able to use the feature but DO NOT want to run a unsecured install of Java if we can start a portable version for this.

Hi, I'm currently using a docker container version which is maintained, and seems to work very well without having to change any java versions manually - it is a "portable version" but dockerised

https://hub.docker.com/r/domistyle/idrac6/

@cliffmathew
Copy link

I was able to connect doing this (iDRAC 6 Enterprise):

Here's how my directory ended:

Directory.png

Then I'm using this PowerShell script:

Set-Location -Path C:\idrac
$ServerHost = Read-Host "Type the name of the host that you want to connect to"
$HostPassword = Read-Host "Type the password of the host that you want to connect to"
Write-Host "nDownloading files..." wget.exe -N --no-check-certificate "https://$ServerHost/software/avctKVM.jar" -q wget.exe -N --no-check-certificate "https://$ServerHost/software/avctVMWin64.jar" -P lib -q wget.exe -N --no-check-certificate "https://$ServerHost/software/avctKVMIOWin64.jar" -P lib -q Write-Host "nExpanding files to initiate connection..."
Rename-Item .\lib\avctVMWin64.jar avctVMWin64.zip
Rename-Item .\lib\avctKVMIOWin64.jar avctKVMIOWin64.zip
Expand-Archive .\lib\avctVMWin64.zip -DestinationPath .\lib
Remove-Item .\lib\META-INF -Recurse -Confirm:$False
Expand-Archive .\lib\avctKVMIOWin64.zip -DestinationPath .\lib
Remove-Item .\lib\META-INF -Recurse -Confirm:$False
Remove-Item .\lib*.zip
Start-Process -FilePath .\bin\java -ArgumentList "-cp avctKVM.jar -Djava.library.path=.\lib com.avocent.idrac.kvm.Main ip=$ServerHost kmport=5900 vport=5900 user=root passwd=$HostPassword apcp=1 verison=2 vmprivilege=true 'helpurl=https://$($ServerHost):443/help/contents.html'"
Remove-Item .\lib*.dll
Remove-Item .\avctKVM.jar

It worked without modifying my PC java.security file.

The only problems until now is that I didn't find a way to pass the password using PowerShell in a secure way (I have tried the -AsSecureString), so for now the password is in plain text... =/ And I have tried to use this code to download the files:

Invoke-WebRequest https://$ServerHost/software/avctKVM.jar -OutFile .\avctKVM.jar

But sometimes worked, sometimes don't, I think that I need to initiate the connection first... Meanwhile I'm using wget as other users commented previously.

Anyway, thanks a lot for your time to help a lot of people!!!

JAN 29 2023 / WINDOWS 10: Took your script and made changes to get it to work on my PC.
Steps:

  • Downloaded the same JRE you mentioned first from Oracle website
  • Created C:\IDRAC and expanded as you suggested
  • Created C:\IDRAC\idrac.ps1 file using notepad with the following contents. Notice that I exit before the last 2 remove commands. It works now, I don't have time to spruce it up. WARNING: in my script, Credentials are exposed in the script -- so NOT A SECURE implementation. You can use the prompt based commands from the original poster.

==================
Set-Location -Path C:\idrac
$ServerHost = "192.168.1.92"
$HostPassword = "calvin"

$username = "root"
$password = ConvertTo-SecureString "calvin" -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential -ArgumentList ($username, $password)

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls, [Net.SecurityProtocolType]::Tls11, [Net.SecurityProtocolType]::Tls12, [Net.SecurityProtocolType]::Ssl3
[Net.ServicePointManager]::SecurityProtocol = "Tls, Tls11, Tls12, Ssl3"
add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy

Write-Host "`nDownloading files..."
Invoke-WebRequest -Credential $psCred -Uri "https://$ServerHost/software/avctKVM.jar" -outfile "avctKVM.jar"
Invoke-WebRequest -Credential $psCred -Uri "https://$ServerHost/software/avctVMWin64.jar" -outfile "lib\avctVMWin64.jar"
Invoke-WebRequest -Credential $psCred -Uri "https://$ServerHost/software/avctKVMIOWin64.jar" -outfile "lib\avctKVMIOWin64.jar"

Write-Host "`nExpanding files to initiate connection..."
Move-Item -Force .\lib\avctVMWin64.jar avctVMWin64.zip
Move-Item -Force .\lib\avctKVMIOWin64.jar avctKVMIOWin64.zip
Expand-Archive -Force .\lib\avctVMWin64.zip -DestinationPath .\lib
Remove-Item -Force .\lib\META-INF -Recurse -Confirm:$False
Expand-Archive -Force .\lib\avctKVMIOWin64.zip -DestinationPath .\lib
Remove-Item -Force .\lib\META-INF -Recurse -Confirm:$False
Remove-Item -Force .\lib*.zip

&Start-Process -FilePath .\bin\java -ArgumentList "-cp avctKVM.jar -Djava.library.path=.\lib com.avocent.idrac.kvm.Main ip=$ServerHost kmport=5900 vport=5900 user=root passwd=$HostPassword apcp=1 verison=2 vmprivilege=true 'helpurl=https://$($ServerHost):443/help/contents.html'"
exit
Remove-Item .\lib*.dll
Remove-Item .\avctKVM.jar

@ElanHasson
Copy link

This is by far the easiest: https://github.com/DomiStyle/docker-idrac6

@NoahDar
Copy link

NoahDar commented Apr 28, 2023

For those non java-savvy of us that are reading this and stumped on the Virtual Media/Keyboard capture errors above, you're missing a step;

After downloading avctKVMIOMac64.jar & avctVMMac64.jar from the iDRAC service, unzip them and move to the lib folder. Jar files are just glorified Zips, the real lib treasure is inside

unzip -d avctKVMIOMac64 avctKVMIOMac64.jar
unzip -d avctVMMac64 avctVMMac64.jar
mkdir lib
cp avctKVMIOMac64/libavctKVMIO.jnilib ./lib/
cp avctVMMac64/libavmMac.jnilib ./lib/

Thanks to https://github.com/DaveCorder/ikvm-osx for the java-for-dummies explanation.

Thank you for this!! I was able to do the same for my Linux running Debian 11.

I unzipped the two files:

avctKVMIOLinux64.jar
avctVMLinux64.jar

Then I copied the two extracted files over to jdk1.7.0_80_x64/lib folder:

libavctKVMIO.so
libavmlinux.so

Boom it worked!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment