Host Screen Resolution



  • Does Host Screen Resolution work with the latest version of FOG Server & Client?

    I’m running the following version of the server: 7591 (git) and 0.10.6 for the client but can’t seem to set the resolution of a machine to 800x600.

    Fog Configuration–>Fog Settings–>FOG Client - Display Manager is enabled with the default settings of 1024 x 768, 60.

    For the Host I am testing with I have Display Manager enabled for the Service Settings and the Host Screen Resolution are set to 60, 800, 600.

    They appear to be set in the database appropriately as well.

    mysql> select * from hostScreenSettings;
    +-------+-----------+----------+-----------+------------+----------------+-----------+-----------+
    | hssID | hssHostID | hssWidth | hssHeight | hssRefresh | hssOrientation | hssOther1 | hssOther2 |
    +-------+-----------+----------+-----------+------------+----------------+-----------+-----------+
    |     1 |         4 |      800 |       600 |         60 |              0 |         0 |         0 |
    +-------+-----------+----------+-----------+------------+----------------+-----------+-----------+
    

    I’ve rebooted a few times, logged off and back on, as well as uninstalled and re-installed the Fog client with no success. I do not see any mention of that module in the FOG.log either.



  • Please note that it’s been said that the DisplayManager has been built back into the client.

    https://forums.fogproject.org/topic/8383/svn-5949-screenres-manager/8?loggedin

    @Joe-Schmitt said in Host Screen Resolution:

    @networkguy 0.10.0+ removed DisplayManager from the client. As @Sebastian-Roth pointed at, its a very “Windows only” thing and never received much use compared to how much effort went into maintaining it. @Tom-Elliott, perhaps we can add some kind of “warning” next to display manager stating it isn’t present in 0.10.0+ ?

    Obviously if there is enough support for it, we can add back display manager, but we won’t be porting it to OSX or Linux.



  • @networkguy
    Giving up on this. It seems that I need to be logged in as a user to make this work. When run through any of our scripting tools while the computer is at ctrl-alt-del just doesn’t seem to work.


  • Developer

    you might try this modification to the arguments
    Snapin Run With : powershell.exe
    Snapin run with argument : -ExecutionPolicy Bypass -command "& '
    Snapin File : script.ps1
    Snapin Args: ’ "
    the -command "& '
    and ’ "
    are to wrap the .ps1 file in quotes



  • @Jbob
    Well, still struggling. First off the file I downloaded to be sourced had strangely formatted double quotes so that prevented the file from being interpreted correctly. Fixed that easily with a quick find/replace.

    Secondly, the share that I was running these from appear to not have the appropriate permissions and I had to add in the -ExecutionPolicy Bypass which I completely overlooked the ability to set those options with the GUI (very nice!).

    What I ended up with was putting the file to be sourced in the ps1 that has the resolution I’m looking for and uploading that as a snapin. It runs perfectly fine when I manually download and run on the workstation but it is still giving me an error when running as a FOG snapin.

    Powershell script [Set-800x600.ps1]:

    Function Set-ScreenResolution { 
    param ( 
    [Parameter(Mandatory=$true, 
               Position = 0)] 
    [int] 
    $Width, 
    [Parameter(Mandatory=$true, 
               Position = 1)] 
    [int] 
    $Height 
    ) 
    $pinvokeCode = @" 
    using System; 
    using System.Runtime.InteropServices; 
    namespace Resolution 
    { 
        [StructLayout(LayoutKind.Sequential)] 
        public struct DEVMODE1 
        { 
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] 
            public string dmDeviceName; 
            public short dmSpecVersion; 
            public short dmDriverVersion; 
            public short dmSize; 
            public short dmDriverExtra; 
            public int dmFields; 
            public short dmOrientation; 
            public short dmPaperSize; 
            public short dmPaperLength; 
            public short dmPaperWidth; 
            public short dmScale; 
            public short dmCopies; 
            public short dmDefaultSource; 
            public short dmPrintQuality; 
            public short dmColor; 
            public short dmDuplex; 
            public short dmYResolution; 
            public short dmTTOption; 
            public short dmCollate; 
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] 
            public string dmFormName; 
            public short dmLogPixels; 
            public short dmBitsPerPel; 
            public int dmPelsWidth; 
            public int dmPelsHeight; 
            public int dmDisplayFlags; 
            public int dmDisplayFrequency; 
            public int dmICMMethod; 
            public int dmICMIntent; 
            public int dmMediaType; 
            public int dmDitherType; 
            public int dmReserved1; 
            public int dmReserved2; 
            public int dmPanningWidth; 
            public int dmPanningHeight; 
        }; 
        class User_32 
        { 
            [DllImport("user32.dll")] 
            public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE1 devMode); 
            [DllImport("user32.dll")] 
            public static extern int ChangeDisplaySettings(ref DEVMODE1 devMode, int flags); 
            public const int ENUM_CURRENT_SETTINGS = -1; 
            public const int CDS_UPDATEREGISTRY = 0x01; 
            public const int CDS_TEST = 0x02; 
            public const int DISP_CHANGE_SUCCESSFUL = 0; 
            public const int DISP_CHANGE_RESTART = 1; 
            public const int DISP_CHANGE_FAILED = -1; 
        } 
        public class PrmaryScreenResolution 
        { 
            static public string ChangeResolution(int width, int height) 
            { 
                DEVMODE1 dm = GetDevMode1(); 
                if (0 != User_32.EnumDisplaySettings(null, User_32.ENUM_CURRENT_SETTINGS, ref dm)) 
                { 
                    dm.dmPelsWidth = width; 
                    dm.dmPelsHeight = height; 
                    int iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_TEST); 
                    if (iRet == User_32.DISP_CHANGE_FAILED) 
                    { 
                        return "Unable To Process Your Request. Sorry For This Inconvenience."; 
                    } 
                    else 
                    { 
                        iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_UPDATEREGISTRY); 
                        switch (iRet) 
                        { 
                            case User_32.DISP_CHANGE_SUCCESSFUL: 
                                { 
                                    return "Success"; 
                                } 
                            case User_32.DISP_CHANGE_RESTART: 
                                { 
                                    return "You Need To Reboot For The Change To Happen.\n If You Feel Any Problem After Rebooting Your Machine\nThen Try To Change Resolution In Safe Mode."; 
                                } 
                            default: 
                                { 
                                    return "Failed To Change The Resolution"; 
                                } 
                        } 
                    } 
                } 
                else 
                { 
                    return "Failed To Change The Resolution."; 
                } 
            } 
            private static DEVMODE1 GetDevMode1() 
            { 
                DEVMODE1 dm = new DEVMODE1(); 
                dm.dmDeviceName = new String(new char[32]); 
                dm.dmFormName = new String(new char[32]); 
                dm.dmSize = (short)Marshal.SizeOf(dm); 
                return dm; 
            } 
        } 
    } 
    "@ 
    Add-Type $pinvokeCode -ErrorAction SilentlyContinue 
    [Resolution.PrmaryScreenResolution]::ChangeResolution($width,$height) 
    }
    
    #Call Function Set-ScreenResolution & set resolution
    #Example Set-ScreenResolution 1024 768 or Set-ScreenResolution 1280 1024
    
    Set-ScreenResolution 800 600
    

    Error in fog.log

    ------------------------------------------------------------------------------
    ---------------------------------SnapinClient---------------------------------
    ------------------------------------------------------------------------------
     5/17/2016 11:53 AM Client-Info Client Version: 0.10.6
     5/17/2016 11:53 AM Client-Info Client OS:      Windows
     5/17/2016 11:53 AM Client-Info Server Version: 7659
     5/17/2016 11:53 AM Middleware::Response Success
     5/17/2016 11:53 AM SnapinClient Snapin Found:
     5/17/2016 11:53 AM SnapinClient     ID: 20
     5/17/2016 11:53 AM SnapinClient     RunWith: powershell.exe
     5/17/2016 11:53 AM SnapinClient     RunWithArgs: -ExecutionPolicy Bypass -NoProfile -File
     5/17/2016 11:53 AM SnapinClient     Name: Set_Resolution_800x600
     5/17/2016 11:53 AM SnapinClient     File: Set-800x600.ps1
     5/17/2016 11:53 AM SnapinClient     Created: 2016-05-17 11:52:32
     5/17/2016 11:53 AM SnapinClient     Args: 
     5/17/2016 11:53 AM SnapinClient     Action: 
     5/17/2016 11:53 AM Middleware::Communication Download: http://myfogserver/fog/service/snapins.file.php?mac=00:50:XX:XX:XX:XX||00:00:00:00:00:00:00:E0&taskid=20
     5/17/2016 11:53 AM SnapinClient C:\Program Files (x86)\FOG\tmp\Set-800x600.ps1
     5/17/2016 11:53 AM Bus {
      "self": true,
      "channel": "Notification",
      "data": "{\r\n  \"title\": \"Installing Set_Resolution_800x600\",\r\n  \"message\": \"Please do not shutdown until this is completed\",\r\n  \"subjectID\": \"snapin-Set_Resolution_800x600\"\r\n}"
    }
     5/17/2016 11:53 AM Bus ERROR: Could not enter socket
     5/17/2016 11:53 AM Bus ERROR: Cannot load Counter Name data because an invalid index '' was read from the registry.
     5/17/2016 11:53 AM Bus Emmiting message on channel: Notification
     5/17/2016 11:53 AM SnapinClient Starting snapin...
     5/17/2016 11:53 AM SnapinClient Snapin finished
     5/17/2016 11:53 AM SnapinClient Return Code: 0
     5/17/2016 11:53 AM Bus {
      "self": true,
      "channel": "Notification",
      "data": "{\r\n  \"title\": \"Set_Resolution_800x600 Installed\",\r\n  \"message\": \"Installation has finished and is now ready for use\",\r\n  \"subjectID\": \"snapin-Set_Resolution_800x600\"\r\n}"
    }
     5/17/2016 11:53 AM Bus ERROR: Could not enter socket
     5/17/2016 11:53 AM Bus ERROR: Cannot load Counter Name data because an invalid index '' was read from the registry.
     5/17/2016 11:53 AM Bus Emmiting message on channel: Notification
     5/17/2016 11:53 AM Middleware::Communication URL: http://myfogserver/fog/service/snapins.checkin.php?taskid=20&exitcode=0&mac=00:50:XX:XX:XX:XX||00:00:00:00:00:00:00:E0&newService&json
    ------------------------------------------------------------------------------
    

  • Senior Developer

    Runwith should just powershell.exe. Run with args should be -file (actually -NoProfile -File) would be safer.



  • @Jbob
    Thank you for the suggestion Jbob but something is wonky. 'The system cannot find the file specified.

    ------------------------------------------------------------------------------
    ---------------------------------SnapinClient---------------------------------
    ------------------------------------------------------------------------------
     5/17/2016 11:16 AM Client-Info Client Version: 0.10.6
     5/17/2016 11:16 AM Client-Info Client OS:      Windows
     5/17/2016 11:16 AM Client-Info Server Version: 7659
     5/17/2016 11:16 AM Middleware::Response Success
     5/17/2016 11:16 AM SnapinClient Snapin Found:
     5/17/2016 11:16 AM SnapinClient     ID: 15
     5/17/2016 11:16 AM SnapinClient     RunWith: powershell.exe -file
     5/17/2016 11:16 AM SnapinClient     RunWithArgs: 
     5/17/2016 11:16 AM SnapinClient     Name: Set-800x600
     5/17/2016 11:16 AM SnapinClient     File: Set-800x600.ps1
     5/17/2016 11:16 AM SnapinClient     Created: 2016-05-17 11:15:15
     5/17/2016 11:16 AM SnapinClient     Args: 
     5/17/2016 11:16 AM SnapinClient     Action: 
     5/17/2016 11:16 AM Middleware::Communication Download: http://myfogserver/fog/service/snapins.file.php?mac=00:50:XX:XX:XX:XX||00:00:00:00:00:00:00:E0&taskid=15
     5/17/2016 11:16 AM SnapinClient C:\Program Files (x86)\FOG\tmp\Set-800x600.ps1
     5/17/2016 11:16 AM Bus {
      "self": true,
      "channel": "Notification",
      "data": "{\r\n  \"title\": \"Installing Set-800x600\",\r\n  \"message\": \"Please do not shutdown until this is completed\",\r\n  \"subjectID\": \"snapin-Set-800x600\"\r\n}"
    }
     5/17/2016 11:16 AM Bus ERROR: Could not enter socket
     5/17/2016 11:16 AM Bus ERROR: Cannot load Counter Name data because an invalid index '' was read from the registry.
     5/17/2016 11:16 AM Bus Emmiting message on channel: Notification
     5/17/2016 11:16 AM SnapinClient Starting snapin...
     5/17/2016 11:16 AM SnapinClient ERROR: Could not start snapin
     5/17/2016 11:16 AM SnapinClient ERROR: The system cannot find the file specified
     5/17/2016 11:16 AM Middleware::Communication URL: http://myfogserver/fog/service/snapins.checkin.php?taskid=15&exitcode=-1&mac=00:50:XX:XX:XX:XX||00:00:00:00:00:00:00:E0&newService&json
    ------------------------------------------------------------------------------```

  • Senior Developer

    Snapins run as SYSTEM so they behave differently. Have you tried the powershell command I linked to?



  • @Tom-S
    Hi Tom. I tried that approach but it doesn’t seem to be working when run it as a snapin. When logged in as Administrator I run the exact same command (i just append the -updatereg in my case) and it does what is expected. Have you run into this behavior? I’m using Windows 7 64 bit and the latest nircmd.exe 64 bit.

    Log file containing the error:

    ------------------------------------------------------------------------------
    ---------------------------------SnapinClient---------------------------------
    ------------------------------------------------------------------------------
     5/17/2016 9:30 AM Client-Info Client Version: 0.10.6
     5/17/2016 9:30 AM Client-Info Client OS:      Windows
     5/17/2016 9:30 AM Client-Info Server Version: 7613
     5/17/2016 9:30 AM Middleware::Response Success
     5/17/2016 9:30 AM SnapinClient Snapin Found:
     5/17/2016 9:30 AM SnapinClient     ID: 12
     5/17/2016 9:30 AM SnapinClient     RunWith: 
     5/17/2016 9:30 AM SnapinClient     RunWithArgs: 
     5/17/2016 9:30 AM SnapinClient     Name: vmware_800x600x16
     5/17/2016 9:30 AM SnapinClient     File: vmware_800x600x16.bat
     5/17/2016 9:30 AM SnapinClient     Created: 2016-05-17 09:27:58
     5/17/2016 9:30 AM SnapinClient     Args: 
     5/17/2016 9:30 AM SnapinClient     Action: 
     5/17/2016 9:30 AM Middleware::Communication Download: http://myfogserver/fog/service/snapins.file.php?mac=00:50:XX:XX:XX:XX||00:00:00:00:00:00:00:E0&taskid=12
     5/17/2016 9:30 AM SnapinClient C:\Program Files (x86)\FOG\tmp\vmware_800x600x16.bat
     5/17/2016 9:30 AM Bus {
      "self": true,
      "channel": "Notification",
      "data": "{\r\n  \"title\": \"Installing vmware_800x600x16\",\r\n  \"message\": \"Please do not shutdown until this is completed\",\r\n  \"subjectID\": \"snapin-vmware_800x600x16\"\r\n}"
    }
     5/17/2016 9:30 AM Bus ERROR: Could not enter socket
     5/17/2016 9:30 AM Bus ERROR: Cannot load Counter Name data because an invalid index '' was read from the registry.
     5/17/2016 9:30 AM Bus Emmiting message on channel: Notification
     5/17/2016 9:30 AM SnapinClient Starting snapin...
     5/17/2016 9:30 AM SnapinClient Snapin finished
     5/17/2016 9:30 AM SnapinClient Return Code: -1
     5/17/2016 9:30 AM Bus {
      "self": true,
      "channel": "Notification",
      "data": "{\r\n  \"title\": \"vmware_800x600x16 Installed\",\r\n  \"message\": \"Installation has finished and is now ready for use\",\r\n  \"subjectID\": \"snapin-vmware_800x600x16\"\r\n}"
    }
     5/17/2016 9:30 AM Bus ERROR: Could not enter socket
     5/17/2016 9:30 AM Bus ERROR: Cannot load Counter Name data because an invalid index '' was read from the registry.
     5/17/2016 9:30 AM Bus Emmiting message on channel: Notification
     5/17/2016 9:30 AM Middleware::Communication URL: http://myfogserver/fog/service/snapins.checkin.php?taskid=12&exitcode=-1&mac=00:50:XX:XX:XX:XX||00:00:00:00:00:00:00:E0&newService&json
    ------------------------------------------------------------------------------
    

  • Developer

    I usually hate to throw out 3rd party software in this forum, but I too have software that requires certain screen resolutions. I use NirCmd with a simple batch file as a snapin job.

    Download the app and add it to a share that can be accessed by a non user account. This would be everyone or domain computer (if on domain) permissions. Make sure that the file is marked read/execute by that group.

    next simply create a batch file with:

    @echo off
    \\sharename\folder\nircmd.exe setdisplay 800 600 60
    

    next create snapin and upload that new batch file and viola

    Again not a solution but this how I do it

    -T


  • Moderator

    @Sebastian-Roth From ACT’s web site:

    The ACT® is the leading US college admissions test, measuring what you learn in high school to determine your academic readiness for college.
    http://www.act.org/content/act/en/products-and-services/the-act.html

    The software is used in many colleges as an entry exam, as well as in high schools for seniors.


  • Developer

    @Wayne-Workman said in Host Screen Resolution:

    We do the ACT exam at my school district in the high schools. Resolution for the exam must be set to 800x600, it’s required by the testing software.

    Holy cow… that’s a requirement! Wouldn’t have expected to hear that and obviously didn’t know that this feature is widely in use. Hope you can get this solved via snapins.


  • Senior Developer

    A powershell snapin would do what you want:

    https://community.spiceworks.com/scripts/show/1854-change-screen-resolution-with-powershell

    Simply deploy the the snapin to any computers you want in ACT mode. I’m not saying a definitive no to display manager yet, but as you can see there are simple ways to replicate what it did with snapins.


  • Moderator

    @Jbob We do the ACT exam at my school district in the high schools. Resolution for the exam must be set to 800x600, it’s required by the testing software. It’s a pain to go set this manually in the labs, and un-set it when testing is over. I’d really appreciate it if the DisplayManager functionality could be worked back into 0.10.x.


  • Senior Developer

    @networkguy 0.10.0+ removed DisplayManager from the client. As @Sebastian-Roth pointed at, its a very “Windows only” thing and never received much use compared to how much effort went into maintaining it. @Tom-Elliott, perhaps we can add some kind of “warning” next to display manager stating it isn’t present in 0.10.0+ ?

    Obviously if there is enough support for it, we can add back display manager, but we won’t be porting it to OSX or Linux.


  • Developer

    @networkguy AFAIK this was very low priority on the list of features for the new client. As the new client is cross platform I guess this would be hell to make it work for windows, linux and mac os x… @Jbob?

    Going to move this to feature requests as it isn’t really a bug as I see it.


Log in to reply
 

383
Online

39197
Users

10848
Topics

103263
Posts

Looks like your connection to FOG Project was lost, please wait while we try to reconnect.