Monday, September 21, 2015

Firefox freezing on linux (x2go)

Not scripting related however:
I am using x2go to access my linux (ubuntu) system remotely, using the kdeWM.  If I use firefox though, the moment I right click anywhere on a web page (say to open a link in a new tab or window), firefox freezes.

Turns out it's an issue with the pulse audio daemon, and at least if you're using x2go like me, it's easy to fix once you know what the problem is.

When disconnected from your linux server, in the x2go client, go into the session preferences, click on the Media tab -> and uncheck "Enable sound support".   Selecting esd might also fix it, but I haven't tried that.

Many thanks to the comment by oms-ubun at:  for directing me to the issue.

Tuesday, March 24, 2015

linux (fedora) how to change your screen resolution

The following are intended for when you're using a virtual machine (proxmox host in my case), and the resolution is too high for your 1080p laptop screen that you're using to manage the VMs remotely.
However these methods will probably work with a physical linux installation also (not just a virtual one).

As of 2015 the following method worked for me on Fedora 21 (server version):
Edit the following file with your favorite text editor (mine is VIM): /etc/default/grub
find the line starting with: GRUB_CMDLINE_LINUX=
and put at the end: video=800x600"
when you're done the line should look something like:
GRUB_CMDLINE_LINUX=" rhgb quiet video=800x600"

note: instead of 800x600 you can use, 640x480 or 1024x768 also


To change the resolution off X-windows (xorg),
xrandr --output VGA-0 --mode 800x600
-if you have any errors type xrandr by itself, (and hit enter), and you will see a list of available outputs and the list of modes for each one:

edit: below is my original method, which newer versions of fedora (as of 2015/ fedora 21) doesn't appear to work very well.

If you're running fedora in a virtual machine (proxmox, vmware, virtualbox), and the screen resolution of fedora in console mode (not X), is so high that it takes up your entire screen you can change it using fbset.

If you don't have fbset, first you'll have to install it "sudo yum install fbset"

Then you can change the resolution with the following:
sudo fbset -xres 800 -yres 600
(can use 1024 768, or other resolutions also).

Wednesday, November 5, 2014

chrome for enterprise auto download

In a work environment normally you want to download one copy of an update to one computer, and then copy it to the rest of the computers.  This way you don't clog up your office's internet connection.  While proxys can work, they are often tricky to configure.

Google has a version of chrome that will install for all users on a computer, that you can manage (like disable group updates, and configure some other settings).  Details are at:  They also have a script that will download proper version of chrome and rename it so you can deploy it using a tool to the computers in your enterprise (which is designed to work with their deployment tool but I made it work with some slight modifications).

Chrome has an rss feed at which will notify you when there's an update.  While you could check it every day, how likely are you going to miss the day it came out, and then end up either downloading it during the day (clogging people's bandwidth), or waiting another day to schedule the download?
Below is my batch script for checking the rss feed, and if it sees there's an updated chrome, will call a script that download it automatically.

Now when you see there's a new version of chrome, it's already downloaded (if you scheduled the checking script to run every night).  I then create a package using local update publisher or wsus package publisher.

rem -----------------------------------------------------------------------------------------------
@echo off
set updatesloc=\\server\share\folder\google-chrome
rem set debug=1 if you have any problems.
set debug=0
if %debug%==1 echo grabbing the feed at %time%
wget -O %temp%\chrome-updates-feed.html
rem searching the feed for the current chrome version, and breaking out as soon as we
rem find the first one (that's not for chrome OS).

if %debug%==1 echo searching the downloaded feed for the current version at %time%
for /f "tokens=8" %%v in ('find /i "The stable channel has been updated to " %temp%\Chrome-updates-feed.html ^|find /v "Chrome OS"') do (
set curver=%%v
goto endverfind

if %debug%==1 echo searching the directory of downloaded updates to see if we already have the current version %time%
rem if the curver string length is less then three characters it's probably not valid.
rem google uses very long version numbers like: 38.0.2125.111
if "%curver:~3,1%"=="" goto end

for /f "tokens=1" %%d in ('dir /s /b %updatesloc% ^|find /c "%curver%"') do set curverdownloaded=%%d
if %debug%==1 echo search complete now to figure out what to do %time%
if %curverdownloaded%==0 goto downloadnewver
if %curverdownloaded%==0 goto gotcurver

echo got the current version, %curver% nothing to do
goto end

echo need to download the newest version %curver%, at %time%
c:\windows\syswow64\cscript.exe %updatesloc%\update-chrome.vbs
goto end

echo %time%
rem -------------------------------------------------------------------

my modified download vbscript (based heavily on the script at
make sure you've downloaded dsofile
and that you have wget in your path, wget is needed for the batch file above also.

' update-chrome.vbs -- stored in %updatesloc%\google-chrome
Option Explicit
Dim objFSO, objFile, strFileProperties, objShell, strChromePath, strChromeURL
Dim strVersion, objResult, strChromeFilename, objOleFile, arrComments
Dim strTemplateFilename, ForReading, ForWriting, strText
Dim strNewText

strChromePath = "j:\patches\google-chrome\"
'strChromePath = "c:\downloads\"
strChromeFilename = "GoogleChromeStandaloneEnterprise.msi"
strTemplateFilename = "google-chrome-template.xml"
strChromeURL = "" & _

Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOleFile = CreateObject("DSOFile.OleDocumentProperties")

objShell.CurrentDirectory = strChromePath
' wget downloaded from
objResult = objShell.Run("wget --limit-rate=200k --no-check-certificate " & strChromeURL, 1, True)
If objFSO.FileExists(strChromePath & strChromeFilename) Then
' Grab version number. Requires Office installation, or DSOFile.dll
' from
objOleFile.Open(strChromePath & strChromeFilename)
arrComments = Split(objOleFile.SummaryProperties.Comments, " ", 2)
strVersion = arrComments(0)

' Make a copy of the file
Set objFile = objFSO.GetFile(strChromePath & strChromeFilename)
objFile.Copy strChromePath & "GoogleChromeStandaloneEnterprise-" & _
strVersion & ".msi", True
' Delete the original file
objFile.Delete True
' Update package definitions
' updateXML strTemplateFilename, _
' "..\..\packages\google-chrome.xml" ' legacy tree
' updateXML strTemplateFilename, _
' "..\..\dev\packages\google-chrome.xml" ' dev tree
' updateXML strTemplateFilename, _
' "..\..\stable\packages\google-chrome.xml" ' stable tree
MsgBox "Selected file does not exist!"
End If

'Sub updateXML(strTemplateFilename, strPackageFilename)
' Update package definition
' ForReading = 1
' ForWriting = 2
' Set objFile = objFSO.OpenTextFile(strTemplateFilename, ForReading)
' strText = objFile.ReadAll
' objFile.Close
' strNewText = Replace(strText, "__VERSION__", strVersion)
' Set objFile = objFSO.OpenTextFile(strPackageFilename, ForWriting)
' objFile.WriteLine strNewText
' objFile.Close
'End Sub

Thursday, August 7, 2014

finding your interface name for netsh

How to find the name of your interface for netsh.

In a previous post I had a ip changing script that used netsh to change the ip addresses.
The main syntax being: "netsh interface ip set address "Local Area Connection" static 1

However in windows 8, there are two issues:
1) you now have to use ipv4 instead of ip,
2) my previous method of using ipconfig to find the name of the network connection to use, doesn't work.

For the second issue I would get the error: "The filename, directory name, or volume label syntax is incorrect."

To find the correct name for your connection (where it says "Local Area Connection" above), type in:
netsh interface show interface
This will list the currently enabled interfaces, which hopefully will include the one you're trying to mess with.  If the one you want isn't listed, make sure it's associated with a wireless network (if it's the Wi-Fi interface),  or the network cable is plugged in if it's a wired interface.

Thursday, January 23, 2014

windows ip switcher

Where I work, I support multiple offices.  Most of the offices do not have DHCP, they use static ip addresses (not my decision).  So here is a script I made for changing the ip address settings on a windows laptop, this does have to be ran with full admin privileges.  You will have to change parts of this script for your usage (where ever you see an ip address, and probably want to change the labels for the networks also).

echo ip-switch ver 20081119

set baseoffice=hq

rem now we figure out what subnet we're on
for /f "tokens=2 delims=:" %%i in ('ipconfig ^|find "IP Address"') do set ipaddr=%%i
for /f "tokens=2,3 delims=." %%o in ('echo %ipaddr%') do set subnet=%%o.%%p

rem based on the sub-net we determine what our location is
if /i "%subnet%" == "10.10" set loc=hq
if /i "%subnet%" == "10.11" set loc=sub
if /i "%subnet%" == "11.11" set loc=b1
if /i "%subnet%" == "11.12"  set loc=b2
if "%loc%" == "hq" set comploc=acompanyoffice
if "%loc%" == "substation" set comploc=acompanyoffice
if "%loc%" == "branch1" set comploc=acompanyoffice
if "%loc%" == "branch2" set comploc=acompanyoffice
if "%comploc%" == "acompanyoffice" goto comploc
set comploc=remote

echo off

if "%comploc%" == "acompanyoffiice" echo this computer is currently setup for %comploc% (%loc%) use
if "%comploc%" == "remote" echo this computer is currently setup for %comploc% use
echo where is this laptop now (so it can communicate with the internet)?
echo 1) your base office (%baseoffice%)
echo 2) remote, home/other office
echo x) exit (leave everything as it is)
echo if another office enter the two-three letter abbreviation for it,
echo (hq,sub,b1,b2,etc...), and press enter, otherwise,
set /p comploc=press 1,2 or x and then enter:
rem if we entered a correct choice go to the next menu
if "%comploc%" == "1" goto methodmenu
if "%comploc%" == "2" goto methodmenu
if "%comploc%" == "x" echo no changes will be made
if /i "%comploc%" == "x" goto endprog
if /i "%comploc%" == "hq" goto otheroffice
if /i "%comploc%" == "sub" goto otheroffice
if /i "%comploc%" == "b1" goto otheroffice
if /i "%comploc%" == "b2" goto otheroffice

rem if we entered a wrong chose clear screen of distraction
rem and ask for correct input
echo "you must press 1 or 2, or just press enter"
goto complocmenu

set baseoffice=%comploc%
goto methodmenu

echo is the laptop plugged in or using wireless?
echo 1) plugged in
echo 2) wireless
echo x) endprog
set /p netmethod=press 1 or 2 and then press enter

if "%netmethod%" == "1" set conmethod="Local Area Connection"
if "%netmethod%" == "2" set conmethod="Wireless Network Connection"
if "%netmethod%" == "1" goto methodselected
if "%netmethod%" == "2" goto methodselected
if "%netmethod%" == "x" goto endprog
echo "incorrect method selected"
goto methodmenu

if "%comploc%" == "1" goto staticip
if "%comploc%" == "2" goto dhcpip

echo we will configure the computer for jcc office use
rem goto endprog
rem remove the goto endprog when we fix these settings
rem set static ip address (needs to be edited)

for /f "tokens=1 delims=-" %%I in ('echo %baseoffice%') do set loc=%%I
for /f "tokens=2 delims=-" %%C in ('hostname') do set compip=%%C
echo computer ip is %compip%

if /i "%baseoffice%" == "h1" set netaddr=10.10.10
if /i "%baseoffice%" == "sub" set netaddr=10.10.11
if /i "%baseoffice%" == "b1" set netaddr=10.11.11
if /i "%baseoffice%" == "b2" set netaddr=10.11.12

echo network address is %netaddr%

rem netsh interface ip set address "Local Area Connection" static %netaddr%.%compip% %netaddr%.1 1
rem netsh interface ip set dns "Local Area Connection" static
rem netsh interface ip set wins "Local Area Connection" static
netsh interface ip set address %conmethod% static %netaddr%.%compip% %netaddr%.1 1
netsh interface ip set dns %conmethod% static
netsh interface ip set wins %conmethod% static
rem start /wait sysdm.cpl

goto endprog

rem some netsh commands to set dhcp on the interface
netsh interface ip set address name=%conmethod% source=dhcp
netsh interface ip set dns name=%conmethod% source=dhcp
netsh interface ip set wins name=%conmethod% source=dhcp
goto endprog

for /f "tokens=2 delims=:" %%i in ('ipconfig ^|find "Default Gateway"') do set gateway=%%i
ipconfig |find "Address"
ping %gateway%
echo if you got back replys your good, if any of the requests timed out that's not good.

Thursday, December 12, 2013

change system SQL database connection

In windows you can create a database connection for your front end program to use.  Well as with all things in life things change, you decide to get a new database server, you messed up on the initial imaging of the workstations, you decided to expand or consolidate your database servers.  Instead of having to go around to each desktop and dig through control panel on each one to edit the database connection, here's a script to change the server.

This does not create a new database connection on each computer, for that you'll probably want to do configuration through control panel on one of the computers and then export it out the HKLM\SOFTWARE\Wow6432Node\ODBC\ODBC.INI or HKLM\SOFTWARE\ODBC\ODBC.INI keys to a file.

If your database is something other then CMS you'll need to change the key path referenced below.

@echo off
if "%1" == "" goto needarguments
for /f "tokens=2" %%W in ('date /t') do set dater=%%W
for /f "tokens=1-3 delims=/" %%d in ('echo %dater%') do set curdate=%%f%%d%%e
rem what we're changing the CMS database server to.
set dsnserver=newprod

set remotecomp=%1
rem need to do some ping checks and stuff
echo updating %1 at %time%

for /f "tokens=2 skip=1 delims==" %%q in ('ping -n 1 %1') do set pingtimer=%%q
for /f "tokens=1 delims=m" %%s in ('echo %pingtimer%') do set pingtime1=%%s

if "%pingtime1%" == "1 Received " set pingtime1=down
if "%pingtime1%" == "down" echo %1 down at %date% %time% >> pc-down-dsn-%curdate%.lst
if "%pingtime1%" == "down" goto thiscompfinished

rem this works only if changing the server, if no dsn/odbc connection is
rem yet set up, you'll need to add more registry keys then just this one.
rem echo on
if exist \\%1\c$\windows\syswow64 reg add "\\%1\HKLM\SOFTWARE\Wow6432Node\ODBC\ODBC.INI\CMS" /v Server /t reg_sz /d %dsnserver% /f
if not exist \\%1\c$\windows\syswow64 reg add "\\%1\HKLM\SOFTWARE\ODBC\ODBC.INI\CMS" /v Server /t reg_sz /d %dsnserver% /f
if errorlevel 1 echo %1 had error updating dsn on %date% %time% >> pc-error-dsn-%curdate%.lst
if errorlevel 0 echo %1 updated dsn to %dsnserver% on %date% %time% >> pc-fixed-dsn-%curdate%.lst
echo off

if not "%1" == "" goto nextcomp
echo finished at %date% %time%
goto end

echo usage: %0 comp1 comp2 comp3 etc...
echo make sure to not use any \\


Monday, December 9, 2013

IE Tracking protection lists

Where I'm at we have a web filtering device that will display a full pdf with the employer's terms of service if you go to a website we have blocked.  Problem is one of those is facebook, and if you go to say a news site and it has a facebook like button, the news site isn't blocked, but you still get a huge pdf file come up on your screen.

Thankfully if you're running a newer version of Internet Explorer, there is a feature called "Tracking Protection Lists", while meant to improve your privacy, they can also disable the facebook "like" button that you find on many websites. Problem is digging through all of IE's settings can be a pain.  So here is a simple internal web page for users to go to load the page (just have to click a button on the page).

note: If you're using IIS to serve this you will need to go into the server's "MIME Types" and add
the .tpl extension.  I labeled it as "application/ie", IIS apparently won't serve unknown MIME types.

First file is the tracking protection list file that we want IE to load.
#------------------don't include this line in facebook-block.tpl ---------------------------
: Expires = 5
# blocked strings
- like.php
# domain rules
# from
#------------------don't include this line in facebook-block.tpl ---------------------------

------index.html --- don't include this line ---------------------
<!DOCTYPE html />
<html >
<!--- from -->
    <title>Internet Explorer 9 Tracking Protection list loader</title>
    <script type="text/javascript">
    function checkTP() {
    //checks whether Tracking Protection has been enabled (any list is on)
        if (window.external.msTrackingProtectionEnabled())
            document.getElementById("results").innerHTML = "Tracking protection is: ON";
        } else {
            document.getElementById("results").innerHTML = "Tracking protection is: OFF";

    //loads a list specified by input field
    function loadTPFile() {
        var URL = document.getElementById("tplfile").value;      
        var description = 'Facebook blocking Tracking Protection List';      
        window.external.msAddTrackingProtectionList(URL, description);

<!---- First check that you have tracking protection enabled by click the
"check tracking protection" button
  <button onclick="checkTP();">Check tracking protection</button>
  <span id="results">Tracking protection is: </span>
<p />
Remember that you need to have tracking protection "on" for this to work
if tracking protection is off, go to: <br>
tools, tracking protection, select "Your Personalized List" and click enable, close, <br>
then click on the "check tracking protection" button again.

<p />
This is for blocking the facebook like button (and facebook's other tracking mechanisims),
that are on many websites nowdays, which cause the company's usage policy to pop up.  To stop this: <br>
click on "load TPL file"
and click on the "add list" button
<p />
  <button onclick="loadTPFile();">Load TPL file</button>
  <input id= "tplfile" type="text" value="facebook-block.tpl" size="60" />

<p />
Remember if you go to the website itself you will still get a copy of the company's
Internet usage policy poping up.