Looking to Set Up Multiple Virtual Desktops

Hi, I'm a newb looking to set up multiple virtual desktops for my employees. What would be the best windows image to use and how do I install Chrome onto the machines?

Hi Shru84;
Welcome to Azure.  Azure Virtual Machine as the name suggest are Virtual Server which function as your regular server but does not have a physical presence but is hosted on Azure Platform.
We have a variety of OS flavors, there is nothing which is good or bad, its more of a question of your requirement.  Please note that the desktop Version of Windows 7/ 8
are at the moment only available for MSDN subscriber.
As for Chrome Installation its the same as installing it on a regular machine, that is opening up a web browser, loggin into chrome download site and installing it. ( http://www.google.com/chrome/ )
Here is an example:
his tutorial shows you how easy it is to create an Azure virtual machine (VM). This tutorial uses a Windows Server image, but that's only one of the many images available through Azure. This includes Windows operating systems, Linux-based operating systems,
and images with installed applications. The images you can choose from depend on the type of subscription you have. For example, desktop images may be available to MSDN subscribers.
You can also create Windows VMs using
your own images as templates. To learn more about Azure VMs, see
Overview of Azure Virtual Machines.
NOTE:
You need an Azure account to complete this tutorial:
You can
open an Azure account for free: You get credits you can use to try out paid Azure services, and even after they're used up you can keep the account and use free Azure services, such as Websites. Your credit card will never be charged, unless you explicitly
change your settings and ask to be charged.
You can
activate MSDN subscriber benefits: Your MSDN subscription gives you credits every month that you can use for paid Azure services.
How to create the virtual machine
This section shows you how to use the From Gallery option in the Management Portal to create the virtual machine. This option provides more configuration choices than the
Quick Create option. For example, if you want to join a virtual machine to a virtual network, you'll need to use the
From Gallery option.
NOTE:
You can also try the richer, customizable Azure Preview Portal to create a virtual machine, automate the deployment of multi-VM application templates, use enhanced VM monitoring and diagnostics features, and more. The
available VM configuration options in the two portals overlap substantially but aren't identical.
Sign in to the Azure Management Portal. Check out the
Free Trial offer if you don't have a subscription yet.
On the command bar at the bottom of the window, click New.
Under Compute, click Virtual Machine, and then click
From Gallery.
The first screen lets you Choose an Image for your virtual machine from one of the lists in the Image Gallery. (The available images may differ depending on the subscription you're using.) Click the arrow to continue.
The second screen lets you pick a computer name, size, and administrative user name and password. If you just want to try out Azure Virtual Machines, fill in the fields as shown in the image below. Otherwise, chose the tier and size required to run your
app or workload. Here are some details to help you fill this out:
New User Name refers to the administrative account that you use to manage the server. Create a unique password for this account and make sure to remember it.
You'll need the user name and password to log on to the virtual machine.
A virtual machine's size affects the cost of using it, as well as configuration options such as the number of data disks you can attach. For details, see
Virtual Machine and Cloud Service Sizes for Azure.
The third screen lets you configure resources for networking, storage, and availability. Here are some details to help you fill this out:
The Cloud Service DNS Name is the global DNS name that becomes part of the URI that's used to contact the virtual machine. You'll need to come up with your own cloud service name because it must be unique in Azure. Cloud services are important
for scenarios using
multiple virtual machines.
For Region/Affinity Group/Virtual Network, use a region that's appropriate to your location. You can also choose to specify a virtual network instead.
NOTE:
If you want a virtual machine to use a virtual network, you must specify the virtual network when you create the virtual machine. You can't join the virtual machine to a virtual network after you create the VM. For more information, see
Azure Virtual Network Overview. - For details about configuring endpoints, see
How to Set Up Endpoints to a Virtual Machine.
The fourth configuration screen lets you configure the VM Agent and some of the available extensions. Click the check mark to create the virtual machine.
NOTE:
The VM agent provides the environment for you to install extensions that can help you interact with or manage the virtual machine. For details, see
Using Extensions.
After the virtual machine is created, the Management Portal lists the new virtual machine under
Virtual Machines. The corresponding cloud service and storage account also are created and are listed in those sections. Both the virtual machine and cloud service are started automatically and the Management Portal shows their status as
Running.
Click Virtual Machines, and then select the appropriate virtual machine.
On the command bar, click Connect.
Click Open to use the Remote Desktop Protocol file that's automatically created for the virtual machine.
Click Connect to continue.
Type the credentials for the administrative account on the virtual machine, and then click
OK.
TIP:
In most cases, you'll use the user name and password that was specified when the virtual machine was created. Check the user name to make sure it has the correct domain information:
If the VM belongs to a domain at your organization, make sure the user name includes the name of that domain.
If the VM doesn't belong to a domain, either remove any domain information by starting the line with '\' or use the VM name as the domain name. For example,
\MyUserName or MyTestVM\MyUserName.
If the VM is a domain controller, type the user name and password of a domain administrator account for that domain.
Click Yes to verify the identity of the virtual machine.
You can now work with the virtual machine remotely.
Regards;
Prasant

Similar Messages

  • How can I set up multiple spaces (desktops) on my new MacBook Pro 10.9.5?  I have six set up on my other computer MacBook Pro 10.8.5 but can't find how to do it on this new one.  Would appreciate help on this.  Cheers.

    How can I set up multiple spaces (desktops) on my new MacBook Pro 10.9.5?  I have six set up on my other computer MacBook Pro 10.8.5 but can't find how to do it on this new one.  Would appreciate help on this.  Cheers.

    It's not completely obvious. What you have to do in Spaces is to position your cursor to the upper right of the screen, after which faint + (plus) sign appears in that area. Click that, upon which another Desktop will appear.
    The + may be difficult or impossible to see with some desktop backgrounds (black, for instance):

  • Virtual Desktop switching in Mavericks

    With Mavericks, each display has its own set of virtual desktops whereas before, a virtual desktop "spanned" displays.
    I used to have 4 virtual desktops.  After the upgrade, these virtual desktops were mapped to my primary monitor, and the secondary had one virtual desktop.  That part was ok as I use the secondary monitor only to run a Terminal that I would use across all my virtual desktops.  But the inconvenience now is switching virtual desktops!  If I'm typing something in the terminal on the secondary monitor and want to quickly go to another virtual desktop, I now first have to bring the mouse over to the primary monitor and THEN switch desktops.  Very annoying.
    Does someone know of a setting or utility that can map the "virtual desktop switching" keyboard combination to a fixed display?
    Apple, are you listening?  Why is Mavericks not smart enough to realize that when a user hits the keyboard combination for switching virtual desktops on a display with only ONE virtual desktop that this probably means they meant to switch virtual desktops on the other display (especially when there's only one display with multiple virtual desktops!)?

    tjwolf wrote:
    Apple, are you listening?
    It is highly unlikely anybody working for Apple who can do anything about this is reading these forums. You might want to consider submitting the form at http://www.apple.com/feedback/macosx.html for things like this.
    Be sure to indicate in the 'feedback type' popup the most appropriate choice for your submission. That is the best way to get it seen by the right people.

  • I have to login twice to access a Virtual Desktop in a pooled environment

    I have multiple virtual desktop collections and I've noticed something strange about each collection.  If I try and connect to any of them, I double click on the shortcut and it asks for my username and password.  Then it makes it "estimating
    connection quality" where the box just disappears and the connection is lost.  
    If I load the connection again (click the shortcut, and insert my username and password), I connect fine.  But if I wait awhile the same thing happens again.
    Has anyone seen this before?  I'm not getting anything really out of the logs and I was hoping someone might have ideas/suggestions?

    Hi Jacob,
    Thank you for posting in Windows Server Forum.
    Have you set any session time limit setting? It might happens that if you have set any session time limit, then you there might be disconnection due to time limit. You can check below GPO setting for session time limit.
    Configure Timeout and Reconnection Settings for Remote Desktop Services Sessions
    When you are connecting with RDP, click on Experience Tab and choose “Detect connection quality automatically” and check the result. Also would like you to suggest to update RDP version to RDP 8.1 for better feature and functionality. 
    Hope it helps!
    Thanks.
    Dharmesh Solanki

  • Setting up multiple "Desktops" on Macbook Pro

    In getting acclimated to the new OS the only thing I struggle with is as a medical sales consultant when I'm working on multiple analysis worksheets and projects I often do a lot of application and file hopping and noticed that gesture wise I can't just toggle like I used to.    What I did notice was that I can set up a second "desktop" that when using the 4 finger upstroke would allow me to toggle over and open/view a document or file that is sitting on my desktop..... like a client master file or roster list. 
    Is this the best way for quick access to icons and things that are permanent desktop files or apps that are housed there?
    Thanks !

    Thanks.    Spent like 20 minutes looking for this particular issue..... found nothing.    Posted a question and not only did you answer it but the sidebar of "like discussions" had it right there.
    Reposted another question by the way.

  • How to set printer margins if using a lot of printers in virtual desktops which are deleted each time users logs off

    Hello,
    i am using Firefox version 31. I have a problem with page setup margins. I need to use left
    30mm; right 10mm; top 20mm; bottom 20mm. I am using VMware floating assignemnt linked clones
    virtual desktops. After users log off - machines are deleted and users next time logs on get's brand
    new VDI's. Users gets printers to VDI using login script from Active Directory.
    Option Explicit
    Dim strPrinterUNC, objNetwork
    strPrinterUNC = "\\some_server\printer_number_1"
    Set objNetwork = CreateObject("WScript.Network")
    objNetwork.AddWindowsPrinterConnection strPrinterUNC
    WScript.Sleep (20000)
    objNetwork.SetDefaultPrinter strPrinterUNC
    Set objNetwork = Nothing
    Each user have different logon script, because they use different printers (different printer names e.g. \\some_server\printer_number_2 ; \\some_server\printer_number_3 and etc. Page setup margins in Internet Explorer are ok. But how to make Firefox page setup margins as i need? For other options i have
    used CCK2 Wizard 2.0.4 tool. It worked fine. Maybe i can put some information in C:\Program
    Files\Mozilla Firefox\defaults\pref\autoconfig.js I have some usefull data in it allready. I
    have found info that: "Setting print margins is done in the printer settings". I have a lot of
    printers, so i can not set printer margins individualy for each of them. Now mozilla shows top,
    bottom, right, left each 12.7 mm. What should i do if i have a lot of printers in enterprise
    environment?

    Firefox has a profile folder that has preferences to save this. But the config that would need to be changed is:
    print. save_print_settings = True - (default): Save the print settings after each print job
    Locking that preference: [http://kb.mozillazine.org/Locking_preferences]
    Or done manually:
    #In order to check the margins, we need to go to ''File'' > ''Page Setup''.
    #Once this is done, switch to the ''Margins & Header/Footer'' tab.
    #Check what's set there under ''Margins''.
    The following are the default values for ''Margins'':
    Check these values accordingly and change them if necessary.

  • Applescript to set a wallpaper on all virtual desktops/spaces

    Hello everybody,
    i just want to share something i came up with after trying many things to set a wallpaper to every of my virtual desktops/spaces... feel free to use and improve it!
    This applescript is based on a few solutions i found on the internet...
    It's really silly, but all the other things doesn't work for me.
    FIRST make sure that AppleScript Editor.app is checked in
    System Preferences --> Security & Privacy --> Privacy --> Accessibility
    Then start AppleScript Editor and paste the following:
    ----- snip -----
    set myWallpaper to "/path/to/image.jpg"
    set myNumberOfSpaces to 5
    -- switch to first space
    tell application "System Events" to key code 18 using control down
    delay 1
    tell application "System Events" to set picture of current desktop to myWallpaper
    delay 0.5
    repeat with theIncrementValue from 2 to myNumberOfSpaces
      -- switch to next space
              tell application "System Events" to key code 124 using control down
      delay 1
              tell application "System Events" to set picture of current desktop to myWallpaper
              delay 0.5
    end repeat
    ----- snip -----
    Adjust the two variables to your needs...
    e.g. i have 5 virtual desktops/spaces
    Then click the Run button and watch it working :-)
    Hopefully this will help someone.
    I think you can easylie make an osascript or o droplet out of this...
    Till now i found no other working shiny easy solution of setting one picture to all my desktops in mavericks.
    Improvements are welcome!
    woodst0ck

    There’s been a couple threads about this, the solution seems to be to install a compositor like xcompmgr or maybe compton (I’m using compton and not seeing the issue).

  • Hi i am a teacher and am looking to buy an iPad - we use SIMS (this isnt compatable with an IPad) but i can log into it via a virtual desktop.  What wold be the best iPad to buy?

    hi there
    im looking to buy an ipad- we use SIMS at school and i need to be able to log into it.  I can via a virtual desktop via the college wireless netork.  I also have work on the network.  What would be the best IPAD to buy?

    You have the choice of a full size iPad or the iPad Mini...both come as either WiFi only or WiFi+cellular data service.  With the cellular data model you can see if there is a SIM available that is appropriate.  Either model is capable of attaching to a wireless network to give you access.  Neither is capable of a wired connection, must be wireless.
    So, the question is which size is the best for your personal use, and do you want cellular data access - great thing to have.  Then the decision is which storage capacity do you want...keep in mind that the iPad is not upgradable after purchase so get the storage you really want to start out.

  • How we set up multiple websites on OSX Server

    BACKGROUND
    After fiddling and futzing around for weeks (actually since last year) I've finally figured out how to set up multiple websites (virtual sites) using one port and one IP address. While there seems to be lots of discussion on this topic, it seems that the basic assumption is that one knows everything about websites, DNS and all that stuff, which I do not.
    When our network was originally established the engineer set up a wiki and also configured webmail, so we had two sites, one secured for mail and the other open for Calendar and the wiki. We were not hosting any websites locally because our school website is hosted by a company in New England.
    This year I wanted to set up websites for teachers and students. As great as the wiki is, there are some things it just can't do as well as a website. So I figured if I set up the sites teachers could link back and forth from one to the other. In addition kids could now start to use a real website instead of the cobbled together file mess I had when we ran a Windows network. Also iWeb is a much more accessible tool than FrontPage.
    SERVER SIDE:
    Snow Leopard Server - 10.6.4
    There are two - actually three pieces if you want your iWeb clients to connect to the server: Server Side Web Services, DNS and, in my case, FTP.
    ================================================ SERVER SIDE - WEB SERVICES
    If you haven't turned on Web services, you'll need to open Server Admin and do that. If you don't know how to set up web services - just reply and I'll step you through that as well.
    Once web services are set up and turned on, you'll see it listed under your server’s name in the Server Admin sidebar. Click on "Web" and then click on the "Sites" tab at the top of page. This is where you list all your sites.
    Click the plus button and enter the fully qualified name of your site, for example: "students.myschool.org". Don't use the defaults here (no name) - that's what got me in trouble before. BE SPECIFIC!
    You'll be looking at the "General" tab (the other tabs, "Options", "Realms", etc. we'll deal with in a second).
    On the "General Tab", the default IP address ("any") and port (80) is just fine. We'll run everything over port 80. (Apache figures all the virtual site stuff out - you don't need your rocket science degree for that.)
    "Web Folder:" is important because this is how you'll "segment" your websites. While I would NEVER do this again, we have a solid state hard drive for the OS and a RAID array for our data files. IF you have that, make sure you do NOT use the default "Web Folder" because it will store all your files on your solid state drive. There may not be enough room, over time, on that drive. I've not experienced it yet, but it's my understanding that if the drive fills up, the server shuts down.
    I store my web sites on a folder on the RAID array.
    Everything else on that tab can be left as the default. (Just make sure that you have an "index.html" or "index.php" file in your web folder root, but iWeb will take care of that for you.)
    I would put in your email address in the "Administrator Email:" field.
    Under "Options" you really don't have to put anything. I've tested making websites with iWeb and it doesn't appear that anything needs to be checked.
    Nothing needs to be entered in "Realms" as well from what I see working w/ iWeb.
    The defaults in "Logging" are fine.
    You can leave "Security" alone, but we do have a (self-issued) certificate listed for our webmail site.
    "Aliases" is important. Under "Web Server Aliases" you enter how you want the site to respond to when users type in a URL in their web browsers.
    When our web server was initially set up the engineer set up "wiki.myschool.org" on port 80 and "mail.myschool.org" on port 443. In the aliases section was nothing but a "*" (the wildcard character). That means, from what I can figure out, that the webserver will respond to these sites regardless of what is typed in the URL. (Well, something like that - point is, if you create OTHER websites, you'll NEVER get to them because the wildcard character in the "Aliases" section, in effect, grabs those web requests and redirects them to the sites that are already there.
    In my case I deleted both of those wild card characters. For my "wiki.myschool.org" site, I entered "mail.myschool.org". That means if you type EITHER "wiki." or "mail.", go to the site that’s stored in the “Web Folder” we set up when those sites were created.
    For "mail.myschool.org" I just DELETED the wildcard character. I wanted that site (since it was secured) only to respond to "mail." - nothing else. (You're not going to that secured site for any other reason than to get your mail.)
    "Proxy" can be left blank. Have no idea what that does. As time permits I'll do some research and figure out what it's used for.
    "Web Services" is if you want to provide any MORE services to this particular site. Most likely you'll want to uncheck all the boxes. For our "wiki." site, we have checked "Wikis", "Blogs", and "Calendar". For our "mail." site we have those checked PLUS "Mail".
    I would create a separate "Web Folder" for each of your sites. I don't know if that's a requirement but for housekeeping purposes, I would keep the sites separated. And I SUSPECT that it's "best practice" to separate your wiki from your other websites.
    SERVER SIDE - DNS
    OK...now you have to make your site reachable and the only way to do that is to set up DNS so that folks don't need to type in the IP address of your web server. You need to set up DNS inside your network and, if you want folks in the outside world to reach your website, you'll need to set up an external DNS as well. I'm going to cover INTERNAL DNS - if you don't know how to set up EXTERNAL DNS - reply or email me and I'll post those instructions.
    Most likely you have already created Zones for you network...all you really need to do is create "Aliases" so that when you type "students.myschool.org" your web browser will know that site resides on IP address XXX.XXX.XXX.XXX.
    If you've set up Zones then you already have a "Machine" setting that translates your server’s name to an IP address and vice versa.
    All you need to do is create an "Alias" (CNAME) record for, in this case, "students". You’ll see the choices for types of records when you click the "Add Record" button.
    There are only two fields to configure for a record: "Alias Name" - in this case "students" and "Destination" - in this case "servername.myschool.org". (You've already entered a machine record that says "servername" = 192.168.1.x.)
    That's it for Internal DNS.
    SERVER SIDE - FTP
    Now you have to get iWeb to communicate with the webserver.
    There are only three ways iWeb will communicate with webservers: MobileMe, Local Folder and FTP Server.
    Local Folder is really only practical if you want to host a website on a laptop (I was blown away initially when I found out that all Macs had a built-in web server - how neat is that?). I think there are some very cool things teachers could do with configuration, and, of course, you wouldn't need to set up any web services on the web server, but that's for another discussion. You need to set up FTP services on the web server.
    Turn on and enable FTP on your webserver.
    You can leave the defaults for "General", "Messages" and "Logging". "Advanced" is the only thing you want to set. I set "Authenticated Users See:" to "Home Folder Only". I set the "FTP Root" to the same root folder in which I plan to store my web sites (/VOLUMES/RAID Array/WebServer/Documents). This setting sets that folder only to be accessible via FTP.
    I would suggest returning to your DNS settings and adding one more "Alias". Set "ftp." to point to your webserver. Why? So folks can edit their sites from home (see below).
    CAVEAT: If you are running FTP on other servers, make sure that the settings here do not conflict with the settings on the other servers. For example, I'm running FTP on my file server so that my scanners can communicate with it. However, I configure my FTP settings by machine name and NOT "ftp.myschool.org".
    ================================================
    CLIENT SIDE - CONFIGURING iWEB
    Now you have to configure iWeb so that it will communicate with your server.
    Click on the "Site" icon so that "Site Publishing Settings" appears.
    Publishing:
    "Publish to:" = "FTP Server"
    You can set the "Site name:" and "Contact email:" to whatever you want. But see below!
    FTP Server Settings:
    "Server address"=ftp.myschool.org (you could also enter in servername.myschool.org or the IP address. However, if you want folks to be able to work on the site from home, you will need to configure external DNS for that. If you use the IP address, you're out of luck for remote access to the site. (You can do it but it's beyond the scope of this discussion.)
    "Username" & "Password" should be your user's network login credentials.
    "Directory/Path" - this is important. Remember, you set your "FTP Root" to be "/VOLUMES/RAID Array/WebServer/Documents". If you leave this field blank then the website will be dumped into this folder. If you are only setting up one site, that may be OK. However I wanted to set up a "students" site folder, a "faculty" site folder and a separate site for our literary magazine.
    THEREFORE: I have, in my ..../Documents folder (on the server), a "students" folder, a "faculty" folder, and a "litmag" folder.
    SO...in my "Directory/Path:" field, I have "/faculty". That means the full path to this website is "ftp root/faculty" or "/VOLUMES/RAID Array/WebServer/Documents/faculty" (You don't need a trailing "/" character. iWeb will automatically append the folder for you user depending on what you entered in "Site Name:" in the "Publishing" area.
    Website URL:
    This is the root website depending on whether it is "students" or "faculty". Since iWeb will append the site name to this root website, I accomplished what I hoped to accomplish in this post (http://discussions.apple.com/message.jspa?messageID=12288561#12288561).
    Faculty sites will be @ http://faculty.myschool.org/username. Students @ http://students.myschool.org/username. PERFECT!
    iWeb is such a GREAT tool - NOW the kids can start using it!
    I want to reiterate that this works for our school but it should work for you as well. There may be better ways to do this but it works for us.
    Hope this has been helpful and you won't have to spend weeks trying to figure this all out by yourself!

    OK...here's how we did it.
    To get access to the website you created from outside your network there are a couple of steps.
    First, you have to have a STATIC IP address from your ISP. If you have a T1 circuit, no problem...you usually get a couple of static IPs you can use. However, if you have a cable modem circuit, most likely you have a dynamic IP address which changes when you connect to the internet. Usually a static IP will cost a bit more because the ISP has to go through a couple of steps to set it up for you. But once you have the address, you now have a way for folks outside your network to connect with you.
    (I’m also assuming that you use a router of some sort through which traffic flows out to the internet and that you aren’t using connection sharing or something like that.)
    The next thing you need to do is have your new static IP address associated with the server on which you are hosting your website. You've probably already done that if your website works inside your network. However, you've associated a private ip (192.168.x.x, etc.) to your web server. That doesn't mean anything to folks on the outside because private IP addresses are just that - private - folks can't access them. (I won't get into VPN because that's a whole other topic.)
    The way you associate your new static IP address to your web server is through some sort of dns application from your ISP. For example, we use TierraNet to manage our external DNS information. They have a web interface control panel that is very similar to the DNS interface for XServer. You can create CNAME records (aliases - other ways that folks can access your servers).
    Basically you create an "A" (CNAME) record with a fully qualified domain name (e.g. webserver.myschool.org) and point it to your public IP address (XXX.XXX.XXX.XXX) which you just got from your ISP. It's going to take a while (24-48 hours) for this change to take effect. BTW, you can create as many “A” records as you want. For example mail.myschool.com and wiki.myschool.com could point to the same place.
    You want to make sure that the fully qualified domain name you enter in the external dns utility matches the name you used when you created your internal dns records on your XServer.
    OK...so now folks can get to your domain - but, remember, you have a private network IP scheme between them and you. You now have to tell your router that when web traffic arrives, allow it inside the network and direct it to your web server.
    Let's say your public IP address is 205.100.112.50 and your web server is 192.168.0.5.
    You have to create, in your router’s "Security Zone" (router companies call them different things) a couple of rules. Usually the first rule is: "Let everything inside the network get out to the web." You've probably already done that if folks inside the network can reach the internet.
    You then have to tell the router to allow web traffic (port 80) into your network AND redirect that traffic to 192.168.0.5.
    We use AdTran routers and they have a web interface which allows you to write "rules" affecting public and private traffic. Public is folks outside the network, private is folks inside.
    AdTran calls them "Security Zones" and you modify those zones with policies.
    So my "Policy" would say, in the above example, redirect traffic from my public IP (205.100.112.50) -> to my web server -> (192.168.0.5).
    THEN you have to modify this policy with what AdTran calls "Traffic Selectors". You've said, OK, you can get in, but WHAT can get in?
    The "Traffic Selector" is written to say: "Permit" "TCP" traffic from 205.100.112.50 only through Port 80. (That's the port that web traffic goes over. If you wanted a secure website, you'd add another traffic selector that opens port 443, for example.)
    I'll tell you I'm no genius when it comes to this. I called AdTran and had them configure my router for me. I told them what I wanted done, they remoted into the router and configured it. But then I could go to the web interface and see what they did and then added rules later on when I wanted, for example, to get access to the network via Apple Remote Desktop or VPN into the network on my iPad.
    I'd bet that your router has a maintenance agreement that includes this service and if it doesn't it should have.
    I did find that I still had issues when I tried to set this up originally and it had to do with the ORDER of the policies. I can’t remember exactly what the issue was, but, effectively one of the policies highjacked traffic before the policy that I wanted got triggered. Simply moving them around in the list fixed that issue. So if you have this set up but still can’t access the site, check the order of your rules.
    I don’t know if that helps or not, but I try to think about this stuff conceptually and then get someone to help me with the details. I work with this stuff so infrequently that I forgot how I did something 6 months or a year ago. I’m in the process of creating a wiki for the school which documents all this stuff, but that’s a major undertaking.
    Cheers,
    John

  • RDS 2012 - Virtual desktop collection with powershell and custom answerfile fails on VDI deployment

    Hi Guys,
    I try to deploy a new virtual desktop collection with Win8 VDI's (pooled/managed) based on a custom answer file. Everything needs to automated so working with the server manager is not an option, that's why the answer file is needed.
    The lab environment is based on Windows Server 2012 and Win8 Enterprise only. So functional level etc. is off course Windows Server 2012.
    I Use the following command:
    New-RDVirtualDesktopCollection `
    -CollectionName "Pooled Managed Win8" `
    -Description "This collection contains Pooled and Managed Win 8 VDI machines." `
    -OU "VDI" `
    -ConnectionBroker "RDSCB01.lab.local" `
    -PooledManaged `
    -CustomSysprepUnattendFilePath "\\hyper02\_Unattend\OOBE-only.xml" `
    -VirtualDesktopAllocation @{"hyper02.lab.local"=3} `
    -VirtualDesktopNamePrefix "Pooled-Win8-" `
    -UserGroups "lab.local\domain users" `
    -MaxUserProfileDiskSizeGB 1 `
    -VirtualDesktopTemplateHostServer "hyper02.lab.local" `
    -VirtualDesktopTemplateName “_WIN8-Template” `
    -UserProfileDiskPath "\\hyper02.lab.local\_UserProfileDisks" `
    -StorageType LocalStorage `
    -LocalStoragePath "E:\_VDI" `
    -Force `
    -Debug
    $error[0]|format-list -force
    I tried multiple answer files, but even with this simple one it fails:
    <?xml version="1.0" encoding="utf-8"?>
    <unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="oobeSystem">
    <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <InputLocale>en-US</InputLocale>
    <SystemLocale>en-US</SystemLocale>
    <UILanguage>en-US</UILanguage>
    <UILanguageFallback>en-US</UILanguageFallback>
    <UserLocale>nl-NL</UserLocale>
    </component>
    <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <UserAccounts>
    <AdministratorPassword>
    <Value>UABhAHMAcwB3AG8AcgBkACEAQQBkAG0AaQBuAGkAcwB0AHIAYQB0AG8AcgBQAGEAcwBzAHcAbwByAGQA</Value>
    <PlainText>false</PlainText>
    </AdministratorPassword>
    <LocalAccounts>
    <LocalAccount wcm:action="add">
    <Password>
    <Value>UABhAHMAcwB3AG8AcgBkACEAUABhAHMAcwB3AG8AcgBkAA==</Value>
    <PlainText>false</PlainText>
    </Password>
    <Description>Admin</Description>
    <DisplayName>Admin</DisplayName>
    <Group>Administrators</Group>
    <Name>Admin</Name>
    </LocalAccount>
    </LocalAccounts>
    </UserAccounts>
    <OOBE>
    <HideEULAPage>true</HideEULAPage>
    <HideLocalAccountScreen>true</HideLocalAccountScreen>
    <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
    <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
    <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
    <NetworkLocation>Work</NetworkLocation>
    <ProtectYourPC>3</ProtectYourPC>
    <SkipMachineOOBE>true</SkipMachineOOBE>
    <SkipUserOOBE>true</SkipUserOOBE>
    </OOBE>
    </component>
    </settings>
    <cpi:offlineImage cpi:source="wim:d:/=%20software/iso&apos;s/lic/en_windows_8_enterprise_x64_dvd_917522/sources/install.wim#Windows 8 Enterprise" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
    </unattend>
    Everything goes fine, until is comes to the deployment of the VDI machines and the answer file is called. It fails with the following error:
    PS N:\> \\dc01\isos\New-VirtualDesktopCollection.ps1
    Unable to retrieve the details of the virtual desktop collection.
    + CategoryInfo : WriteError: (:) [Start-RDVMRollout], RDManagementException
    + FullyQualifiedErrorId : StartRDVirtualMachineRollout,Microsoft.RemoteDesktopServices.Management.Cmdlets.StartRDVirtualMachineRo
    lloutCommand
    + PSComputerName : localhost
    CollectionName Type Size PercentInUse
    Pooled Managed... PooledManaged 0 0
    writeErrorStream : True
    OriginInfo : localhost
    Exception : System.Management.Automation.RemoteException: Unable to retrieve the details of the virtual desktop
    collection.
    TargetObject :
    CategoryInfo : WriteError: (:) [Start-RDVMRollout], RDManagementException
    FullyQualifiedErrorId : StartRDVirtualMachineRollout,Microsoft.RemoteDesktopServices.Management.Cmdlets.StartRDVirtualMachineRolloutCo
    mmand
    ErrorDetails :
    InvocationInfo :
    ScriptStackTrace :
    PipelineIterationInfo : {}
    PSMessageDetails :
    Without the answer file parameter is runs perfectly, BUT the VDI machines get the OOBE.... That's not what we want off course....
    This link (http://support.microsoft.com/kb/2747656?wa=wsignin1.0) and other sources tell me that when i set the regkeys i can find a log in c:\windows\logs, but there is
    nothing. I looked on the management server and the connection broker.
    The only thing i could find in the event viewer was this:
    The XML input specified for the VM Provisioning job is not in a valid format. Error: 0xC00CEE03
    Input XML:
    <?xml version="1.0"?>
    <rdvp:RDVProvisioning xmlns:rdvp="http://www.microsoft.com/rdv/2010/05/">
    <rdvp:ProvisionPoolRequest><rdvp:Job>
    <rdvp:Action>Create</rdvp:Action>
    <rdvp:OnError>Stop</rdvp:OnError></rdvp:Job>
    <rdvp:Pool><rdvp:Name>Pooled_Managed_W</rdvp:Name>
    <rdvp:Type></rdvp:Type>
    <rdvp:VhdType>DiffDisk</rdvp:VhdType>
    <rdvp:SaveDelay></rdvp:SaveDelay>
    <rdvp:Version></rdvp:Version>
    <rdvp:MARK_HA>No</rdvp:MARK_HA></rdvp:Pool>
    <rdvp:Vm>
    <rdvp:BaseVmLocation>\\RDSCB01\RDVirtualDesktopTemplate\Pooled_Managed_W\IMGS\__3</rdvp:BaseVmLocation>
    <rdvp:LocalVmCreationPath>E:\_VDI</rdvp:LocalVmCreationPath>
    <rdvp:LocalGoldCachePath></rdvp:LocalGoldCachePath>
    <rdvp:SMBShare></rdvp:SMBShare>
    <rdvp:EnableVmStreaming>0</rdvp:EnableVmStreaming>
    <rdvp:RunVMsFromSMB>0</rdvp:RunVMsFromSMB>
    <rdvp:NamingPrefix>Pooled-Win8</rdvp:NamingPrefix>
    <rdvp:NamingStartIndex>1</rdvp:NamingStartIndex>
    <rdvp:Domain>lab.local</rdvp:Domain>
    <rdvp:OU>OU=VDI,OU=Computers,OU=Kamer 2101,DC=lab,DC=local</rdvp:OU>
    <rdvp:ProductKey></rdvp:ProductKey>
    <rdvp:UnattendXml>
    <![CDATA[<?xml version="1.0" encoding="utf-8"?>
    <unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="oobeSystem">
    <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <OOBE>
    <HideEULAPage>true</HideEULAPage>
    <HideLocalAccountScreen>true</HideLocalAccountScreen>
    <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
    <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
    <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
    <NetworkLocation>Work</NetworkLocation>
    <ProtectYourPC>3</ProtectYourPC>
    <SkipMachineOOBE>true</SkipMachineOOBE>
    <SkipUserOOBE>true</SkipUserOOBE>
    </OOBE>
    </component>
    </settings>
    </unattend>]]>
    </rdvp:UnattendXml>
    </rdvp:Vm>
    <rdvp:HyperVHosts>
    <rdvp:HyperVHost>
    <rdvp:Name>hyper02.lab.local</rdvp:Name>
    <rdvp:NumberVms>3</rdvp:NumberVms>
    </rdvp:HyperVHost>
    </rdvp:HyperVHosts>
    </rdvp:ProvisionPoolRequest>
    </rdvp:RDVProvisioning>----------------------------------------------------------------------Log Name: Microsoft-Windows-TerminalServices-SessionBroker/Admin
    Source: TerminalServices-SessionBroker
    EventID: 1549
    Level: Error
    User: NETWORK SERVICE
    Task Category: MS VM Provisioning Plugin
    Computer: RDSCB01.lab.local
    I hope we can get this working, thanks in advance everybody!
    Regards,
    Bart

    Hi Bartsp34ks,
    I'm trying to make a powershell script like yours.
    But at some point I receive this error:
    System.Management.Automation.RemoteException: VM ASD-1: The data area passed to a system call is too small. (Exception from HRESULT: 0x8007007A)
    My Powershell script is:
    $CollectionName = Read-Host 'What Name should the Collection have?'
    $Description = Read-Host 'Type a description of the Collection'
    $OU = Read-Host 'In which OU should I put the Collection?'
    $ConnectionBroker = Read-Host 'What is the Connection Broker Name? (use FQDN)'
    $Sysprep = Read-Host 'Type the Unattend file location'
    $DesktopAllocation = Read-Host 'On which RD Virtualization Host server should I create the Collection?'
    $DesktopAllocationNR = Read-Host 'How many Virtual Desktop would you like?'
    $NamePrefix = Read-Host 'What is the Prefix Name?'
    $NameSuffix = Read-Host 'What is the Suffix Name?'
    $UserGroup = Read-Host 'Which User Group can use the Collection?'
    $UserProfile = Read-Host 'How big can the ProfileDisk be?'
    $TemplateServer = Read-Host 'What is the RD Host that has the Virtual Desktop Template? (use FQDN)'
    $TemplateName = Read-Host 'What is the Virtual Desktop Template Name?'
    $UserProfilePath = Read-Host 'What should be the User Profile Path?'
    $StorageType = Read-Host 'How should be stored?'
    $StoragePath = Read-Host 'Type the Path'
    New-RDVirtualDesktopCollection `
    -CollectionName $CollectionName `
    -Description $Description `
    -OU $OU `
    -ConnectionBroker $ConnectionBroker `
    -PooledManaged `
    -CustomSysprepUnattendFilePath $Sysprep `
    -VirtualDesktopAllocation @{$DesktopAllocation=$DesktopAllocationNR} `
    -VirtualDesktopNamePrefix $NamePrefix `
    -UserGroups $UserGroup `
    -MaxUserProfileDiskSizeGB $UserProfile `
    -VirtualDesktopTemplateHostServer $TemplateServer `
    -VirtualDesktopTemplateName $TemplateName `
    -UserProfileDiskPath $UserProfilePath `
    -StorageType LocalStorage `
    -LocalStoragePath $StoragePath `
    -Force `
    -Debug
    $error[0]|format-list -force
    Thanks for help

  • Random question: Why are there multiple virtual consoles?

    I'm very interested in every single detail of some things and that has spawned a random question.
    Why do we have multiple virtual consoles(proper term?) ?  i.e. if I am looking at my desktop I can simply hit ctrl-alt-f3 for example, and poof!  I'm at a new login prompt.
    What is/are the purpose(s) for this feature?  Can someone name off some scenarios?
    Thanks!

    Forgotten Path wrote:
    How so?  I tried running
    virtualbox --startvm Windoze
    on a virtual console and received an error about finding the X server.
    Here is my ~/.xinitrc
    #xset b off
    setxkbmap -option ctrl:nocaps
    case $WM in
    kde)
    ck-launch-session dbus-launch startkde
    gnome)
    ck-launch-session dbus-launch gnome-session
    compiz)
    ~/bin/compiz&
    ck-launch-session dbus-launch compiz ccp
    #ck-launch-session dbus-launch fusion-icon
    lxde)
    ~/bin/lxde&
    ck-launch-session dbus-launch startlxde
    openbox)
    ~/bin/openbox&
    ck-launch-session dbus-launch openbox
    e17)
    ck-launch-session dbus-launch
    enlightenment_start
    vb)
    VirtualBox -startvm "Windows XP" -fullscreen
    xfce4)
    ck-launch-session dbus-launch startxfce4
    i3)
    ck-launch-session dbus-launch i3
    ck-launch-session dbus-launch startxfce4
    esac
    From the console, use :
    WM=vb startx
    or, if there is already something running on Screen 0 (OpenBox, Xfce4, whatever) simply:
    WM=vb startx -- :1
    Note that the examples start VitutalBox.  I could just as easily set WM to any of the other environments defined in my .xinitrc.
    I have also made this work straight from kdm.  I think I created a custom session, but I may have created a .desktop file in /usr/share/apps/kdm/sessions/ 
    I am not using kdm on this machine and I don't remember
    edit: Typo
    Last edited by ewaller (2012-02-11 23:14:09)

  • Dell Precision T5810 Core options and GPU config? Running CC on virtual desktops?

    Hi, two questions really but didn't want to start multiple threads.
    I tried searching for answers to my questions but was not very successful so am trying to post. I am looking at buying some computers for our office which will be using the CC subscription for their workflow. Predominately this is short form video editing on Premiere (3-10min, AVCHD & DSLR mix, 2-3 camera steams, 50/50 just as straight streams/multicam), some light to mid graphics on After Effect and Photoshop then compression through Media Encoder.
    Our media will be stored on a Small Tree shared storage server across a dedicated gigabit network.
    As Dell have just launch their new workstations using the new version of the Xeon 16 series with DDR4 RAM I was thinking of going down that road. Would I be better getting the Hex Core 1650v3, 500GB HDD, 16GB DDR4 2133 RAM with either a Quadro K2200 or Firepro W5100, or Quad Core 1620v3, 500GB HDD, 16GB DDR4 2133 RAM with Quadro K4200?
    As I understand it is important make sure systems are balanced between CPU, GPU, RAM and discs. Which of the above configs would perform better for our work, as I am not sure if the hex core will be more so with a lower GPU, or if the quad with a faster/more expensive GPU will perform better?
    I know when it comes to GPU's a kick off would be to say ditch the workstation line for a GTX to save money, but we have a business deal with Dell as a business their 3 year support is an important consideration to us something they do not support if we chop and change out unsupported components such as a GTX card.
    The other option I have been made by our IT department is that we could buy Dell servers, add graphics cards and run virtual desktops for the editors on them instead of buying stand alone towers. I have not really seen this being done before for video editing which suggests to me that this does not work for one reason or another, but I have not been able to find out much with my Google-fu (which again is probably a bad sign). Is this as bad an idea as I am assuming or is this a potential avenue.
    Hopefully that has all made sense and apologies if I have not followed any forum etiquette, (first time so be kind!)
    Thanks in advance for all and any help.
    Ed

    Hi,
    Thank you for the replies. Having looked at the virtual option more closely I have discounted it as an option. Was never really something I wanted but our IT insisted I evaluated it as part of the process.
    Regarding the workstations I had decided to go with the hex core E5 1650 option so it is good to hear I am heading down the right road! My reasoning for look at the new T5810 (DDR4 RAM) over the previous T3610 which had the 1650v2 (DDR3 RAM) was based on the fact the the cost difference on the website was only about 70-80 pounds. For that little difference it seemed like a good idea to buy the latest offering for future proofing. I will however get Dell to quote me for the two systems and see what the end result is after adding in 32GB of RAM.
    I will also speak to them about their warranty as I was under the impression that by putting a non approved card in the system that if there were issues that involved the card in anyway then they would not assist. Either way I had decided to go Nvidia after reading up about the Firepro computability. Sadly I don't think I would have budget for the K4200 but the K2200 looks like it might be a decent performer as it is based on the maxwell architecture so I would expect it punch a bit above its weight. Would this act as the bottle neck in such a system or would it be fast enough to balance out a E5 1650 and 32GB RAM?
    If it is only the card itself that will not be supported then I guess this is lesser risk and I could consider a consumer card. If I did go down the GTX route then looking at the price of GTX 770 (ideally I would want the 4GB version as the 2GB could be limiting for the future), there does not seem to be a lot in it between them and the GTX970. I would expect  due to the maxwell architecture that this would offer better performance at a lower power draw so I would expect the be better temps than the previous gen. If so then would this be a better option to go for?
    For drives I will look at putting the media cache onto separate drives (we currently do this with our systems that run local storage), though will probably have to be HDD rather than SDD as I have them spare and fast running out of budget!
    Thanks again for all comments.

  • Hacking conky's own_window_type desktop to run on one virtual desktop

    Since I have no dual screen setup (just a laptop) I'd like to use my virtual desktops to run different conky instances on (almost) every virtual desktop. I tried to accomplish this by using own_window_type normal in conky, and that works - until I call the desktop, then it just minimises like a regular app. That's not what I want.
    People in #conky suggested I use the if_match functionality in conky, so I can keep using the own_window_type desktop setting, but that does not solve my issue since you cannot define different conky window sizes in one configuration file. I checked in with #openbox and they told me essentially Conky should not display on every virtual desktop (and frankly they have a point, since you can tell e.g. Openbox to sticky an app on every virtual desktop). However, one would need to hack the code for that (specifically the stuff that takes care of putting the desktop window type on every virtual desktop). That's where you guys come in, since my C knowledge is close to non-existent .
    I was told to look at x11.c and specifically the init_window() function but I'm at loss where to start...
    /* -*- mode: c; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: t -*-
    * vim: ts=4 sw=4 noet ai cindent syntax=c
    * Conky, a system monitor, based on torsmo
    * Any original torsmo code is licensed under the BSD license
    * All code written since the fork of torsmo is licensed under the GPL
    * Please see COPYING for details
    * Copyright (c) 2004, Hannu Saransaari and Lauri Hakkarainen
    * Copyright (c) 2005-2010 Brenden Matthews, Philip Kovacs, et. al.
    * (see AUTHORS)
    * All rights reserved.
    * This program is free software: you can redistribute it and/or modify
    * it under the terms of the GNU General Public License as published by
    * the Free Software Foundation, either version 3 of the License, or
    * (at your option) any later version.
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    * GNU General Public License for more details.
    * You should have received a copy of the GNU General Public License
    * along with this program. If not, see <http://www.gnu.org/licenses/>.
    #include "config.h"
    #include "conky.h"
    #include "logging.h"
    #include "common.h"
    #include "x11.h"
    #include <X11/Xlib.h>
    #include <X11/Xatom.h>
    #include <X11/Xmd.h>
    #include <X11/Xutil.h>
    #ifdef IMLIB2
    #include "imlib2.h"
    #endif /* IMLIB2 */
    #ifdef XFT
    #include <X11/Xft/Xft.h>
    int use_xft = 0;
    #endif
    #ifdef HAVE_XDBE
    int use_xdbe;
    #endif
    #ifdef USE_ARGB
    int use_argb_visual;
    int have_argb_visual;
    #endif /* USE_ARGB */
    int own_window_argb_value;
    /* some basic X11 stuff */
    Display *display = NULL;
    int display_width;
    int display_height;
    int screen;
    static int set_transparent;
    static int background_colour;
    /* workarea from _NET_WORKAREA, this is where window / text is aligned */
    int workarea[4];
    /* Window stuff */
    struct conky_window window;
    char window_created = 0;
    /* local prototypes */
    static void update_workarea(void);
    static Window find_desktop_window(Window *p_root, Window *p_desktop);
    static Window find_subwindow(Window win, int w, int h);
    /* X11 initializer */
    void init_X11(const char *disp)
    if (!display) {
    if ((display = XOpenDisplay(disp)) == NULL) {
    CRIT_ERR(NULL, NULL, "can't open display: %s", XDisplayName(disp));
    screen = DefaultScreen(display);
    display_width = DisplayWidth(display, screen);
    display_height = DisplayHeight(display, screen);
    get_x11_desktop_info(display, 0);
    update_workarea();
    static void update_workarea(void)
    /* default work area is display */
    workarea[0] = 0;
    workarea[1] = 0;
    workarea[2] = display_width;
    workarea[3] = display_height;
    /* Find root window and desktop window.
    * Return desktop window on success,
    * and set root and desktop byref return values.
    * Return 0 on failure. */
    static Window find_desktop_window(Window *p_root, Window *p_desktop)
    Atom type;
    int format, i;
    unsigned long nitems, bytes;
    unsigned int n;
    Window root = RootWindow(display, screen);
    Window win = root;
    Window troot, parent, *children;
    unsigned char *buf = NULL;
    if (!p_root || !p_desktop) {
    return 0;
    /* some window managers set __SWM_VROOT to some child of root window */
    XQueryTree(display, root, &troot, &parent, &children, &n);
    for (i = 0; i < (int) n; i++) {
    if (XGetWindowProperty(display, children[i], ATOM(__SWM_VROOT), 0, 1,
    False, XA_WINDOW, &type, &format, &nitems, &bytes, &buf)
    == Success && type == XA_WINDOW) {
    win = *(Window *) buf;
    XFree(buf);
    XFree(children);
    fprintf(stderr,
    PACKAGE_NAME": desktop window (%lx) found from __SWM_VROOT property\n",
    win);
    fflush(stderr);
    *p_root = win;
    *p_desktop = win;
    return win;
    if (buf) {
    XFree(buf);
    buf = 0;
    XFree(children);
    /* get subwindows from root */
    win = find_subwindow(root, -1, -1);
    update_workarea();
    win = find_subwindow(win, workarea[2], workarea[3]);
    if (buf) {
    XFree(buf);
    buf = 0;
    if (win != root) {
    fprintf(stderr,
    PACKAGE_NAME": desktop window (%lx) is subwindow of root window (%lx)\n",
    win, root);
    } else {
    fprintf(stderr, PACKAGE_NAME": desktop window (%lx) is root window\n", win);
    fflush(stderr);
    *p_root = root;
    *p_desktop = win;
    return win;
    static int colour_set = -1;
    /* if no argb visual is configured sets background to ParentRelative for the Window and all parents,
    else real transparency is used */
    void set_transparent_background(Window win, int alpha)
    (void)alpha; /* disable warnings when unused */
    #ifdef USE_ARGB
    if (have_argb_visual) {
    // real transparency
    if (set_transparent) {
    XSetWindowBackground(display, win, 0x00);
    } else if (colour_set != background_colour) {
    XSetWindowBackground(display, win,
    background_colour | (alpha << 24));
    colour_set = background_colour;
    } else {
    #endif /* USE_ARGB */
    // pseudo transparency
    if (set_transparent) {
    Window parent = win;
    unsigned int i;
    for (i = 0; i < 50 && parent != RootWindow(display, screen); i++) {
    Window r, *children;
    unsigned int n;
    XSetWindowBackgroundPixmap(display, parent, ParentRelative);
    XQueryTree(display, parent, &r, &parent, &children, &n);
    XFree(children);
    } else if (colour_set != background_colour) {
    XSetWindowBackground(display, win, background_colour);
    colour_set = background_colour;
    #ifdef USE_ARGB
    #endif /* USE_ARGB */
    #ifdef USE_ARGB
    static int get_argb_visual(Visual** visual, int *depth) {
    /* code from gtk project, gdk_screen_get_rgba_visual */
    XVisualInfo visual_template;
    XVisualInfo *visual_list;
    int nxvisuals = 0, i;
    visual_template.screen = screen;
    visual_list = XGetVisualInfo (display, VisualScreenMask,
    &visual_template, &nxvisuals);
    for (i = 0; i < nxvisuals; i++) {
    if (visual_list[i].depth == 32 &&
    (visual_list[i].red_mask == 0xff0000 &&
    visual_list[i].green_mask == 0x00ff00 &&
    visual_list[i].blue_mask == 0x0000ff)) {
    *visual = visual_list[i].visual;
    *depth = visual_list[i].depth;
    DBGP("Found ARGB Visual");
    XFree(visual_list);
    return 1;
    // no argb visual available
    DBGP("No ARGB Visual found");
    XFree(visual_list);
    return 0;
    #endif /* USE_ARGB */
    void destroy_window(void)
    #ifdef XFT
    if(window.xftdraw) {
    XftDrawDestroy(window.xftdraw);
    #endif
    if(window.gc) {
    XFreeGC(display, window.gc);
    memset(&window, 0, sizeof(struct conky_window));
    colour_set = -1;
    void init_window(int own_window, int w, int h, int set_trans, int back_colour,
    char **argv, int argc)
    /* There seems to be some problems with setting transparent background
    * (on fluxbox this time). It doesn't happen always and I don't know why it
    * happens but I bet the bug is somewhere here. */
    set_transparent = set_trans;
    background_colour = back_colour;
    window_created = 1;
    #ifdef OWN_WINDOW
    if (own_window) {
    int depth = 0, flags;
    Visual *visual = NULL;
    if (!find_desktop_window(&window.root, &window.desktop)) {
    return;
    #ifdef USE_ARGB
    if (use_argb_visual && get_argb_visual(&visual, &depth)) {
    have_argb_visual = 1;
    window.visual = visual;
    window.colourmap = XCreateColormap(display,
    DefaultRootWindow(display), window.visual, AllocNone);
    } else {
    #endif /* USE_ARGB */
    window.visual = DefaultVisual(display, screen);
    window.colourmap = DefaultColormap(display, screen);
    depth = CopyFromParent;
    visual = CopyFromParent;
    #ifdef USE_ARGB
    #endif /* USE_ARGB */
    if (window.type == TYPE_OVERRIDE) {
    /* An override_redirect True window.
    * No WM hints or button processing needed. */
    XSetWindowAttributes attrs = { ParentRelative, 0L, 0, 0L, 0, 0,
    Always, 0L, 0L, False, StructureNotifyMask | ExposureMask, 0L,
    True, 0, 0 };
    #ifdef USE_ARGB
    if (have_argb_visual) {
    attrs.colormap = window.colourmap;
    flags = CWBorderPixel | CWColormap | CWOverrideRedirect;
    } else {
    #endif /* USE_ARGB */
    flags = CWBackPixel | CWOverrideRedirect;
    #ifdef USE_ARGB
    #endif /* USE_ARGB */
    /* Parent is desktop window (which might be a child of root) */
    window.window = XCreateWindow(display, window.desktop, window.x,
    window.y, w, h, 0, depth, InputOutput, visual,
    flags, &attrs);
    XLowerWindow(display, window.window);
    fprintf(stderr, PACKAGE_NAME": window type - override\n");
    fflush(stderr);
    } else { /* window.type != TYPE_OVERRIDE */
    /* A window managed by the window manager.
    * Process hints and buttons. */
    XSetWindowAttributes attrs = { ParentRelative, 0L, 0, 0L, 0, 0,
    Always, 0L, 0L, False, StructureNotifyMask | ExposureMask |
    ButtonPressMask | ButtonReleaseMask, 0L, False, 0, 0 };
    XClassHint classHint;
    XWMHints wmHint;
    Atom xa;
    #ifdef USE_ARGB
    if (have_argb_visual) {
    attrs.colormap = window.colourmap;
    flags = CWBorderPixel | CWColormap | CWOverrideRedirect;
    } else {
    #endif /* USE_ARGB */
    flags = CWBackPixel | CWOverrideRedirect;
    #ifdef USE_ARGB
    #endif /* USE_ARGB */
    if (window.type == TYPE_DOCK) {
    window.x = window.y = 0;
    /* Parent is root window so WM can take control */
    window.window = XCreateWindow(display, window.root, window.x,
    window.y, w, h, 0, depth, InputOutput, visual,
    flags, &attrs);
    classHint.res_name = window.class_name;
    classHint.res_class = classHint.res_name;
    wmHint.flags = InputHint | StateHint;
    /* allow decorated windows to be given input focus by WM */
    wmHint.input =
    TEST_HINT(window.hints, HINT_UNDECORATED) ? False : True;
    if (window.type == TYPE_DOCK || window.type == TYPE_PANEL) {
    wmHint.initial_state = WithdrawnState;
    } else {
    wmHint.initial_state = NormalState;
    XmbSetWMProperties(display, window.window, NULL, NULL, argv,
    argc, NULL, &wmHint, &classHint);
    XStoreName(display, window.window, window.title);
    /* Sets an empty WM_PROTOCOLS property */
    XSetWMProtocols(display, window.window, NULL, 0);
    /* Set window type */
    if ((xa = ATOM(_NET_WM_WINDOW_TYPE)) != None) {
    Atom prop;
    switch (window.type) {
    case TYPE_DESKTOP:
    prop = ATOM(_NET_WM_WINDOW_TYPE_DESKTOP);
    fprintf(stderr, PACKAGE_NAME": window type - desktop\n");
    fflush(stderr);
    break;
    case TYPE_DOCK:
    prop = ATOM(_NET_WM_WINDOW_TYPE_DOCK);
    fprintf(stderr, PACKAGE_NAME": window type - dock\n");
    fflush(stderr);
    break;
    case TYPE_PANEL:
    prop = ATOM(_NET_WM_WINDOW_TYPE_DOCK);
    fprintf(stderr, PACKAGE_NAME": window type - panel\n");
    fflush(stderr);
    break;
    case TYPE_NORMAL:
    default:
    prop = ATOM(_NET_WM_WINDOW_TYPE_NORMAL);
    fprintf(stderr, PACKAGE_NAME": window type - normal\n");
    fflush(stderr);
    break;
    XChangeProperty(display, window.window, xa, XA_ATOM, 32,
    PropModeReplace, (unsigned char *) &prop, 1);
    /* Set desired hints */
    /* Window decorations */
    if (TEST_HINT(window.hints, HINT_UNDECORATED)) {
    /* fprintf(stderr, PACKAGE_NAME": hint - undecorated\n");
    fflush(stderr); */
    xa = ATOM(_MOTIF_WM_HINTS);
    if (xa != None) {
    long prop[5] = { 2, 0, 0, 0, 0 };
    XChangeProperty(display, window.window, xa, xa, 32,
    PropModeReplace, (unsigned char *) prop, 5);
    /* Below other windows */
    if (TEST_HINT(window.hints, HINT_BELOW)) {
    /* fprintf(stderr, PACKAGE_NAME": hint - below\n");
    fflush(stderr); */
    xa = ATOM(_WIN_LAYER);
    if (xa != None) {
    long prop = 0;
    XChangeProperty(display, window.window, xa, XA_CARDINAL, 32,
    PropModeAppend, (unsigned char *) &prop, 1);
    xa = ATOM(_NET_WM_STATE);
    if (xa != None) {
    Atom xa_prop = ATOM(_NET_WM_STATE_BELOW);
    XChangeProperty(display, window.window, xa, XA_ATOM, 32,
    PropModeAppend, (unsigned char *) &xa_prop, 1);
    /* Above other windows */
    if (TEST_HINT(window.hints, HINT_ABOVE)) {
    /* fprintf(stderr, PACKAGE_NAME": hint - above\n");
    fflush(stderr); */
    xa = ATOM(_WIN_LAYER);
    if (xa != None) {
    long prop = 6;
    XChangeProperty(display, window.window, xa, XA_CARDINAL, 32,
    PropModeAppend, (unsigned char *) &prop, 1);
    xa = ATOM(_NET_WM_STATE);
    if (xa != None) {
    Atom xa_prop = ATOM(_NET_WM_STATE_ABOVE);
    XChangeProperty(display, window.window, xa, XA_ATOM, 32,
    PropModeAppend, (unsigned char *) &xa_prop, 1);
    /* Sticky */
    if (TEST_HINT(window.hints, HINT_STICKY)) {
    /* fprintf(stderr, PACKAGE_NAME": hint - sticky\n");
    fflush(stderr); */
    xa = ATOM(_NET_WM_DESKTOP);
    if (xa != None) {
    CARD32 xa_prop = 0xFFFFFFFF;
    XChangeProperty(display, window.window, xa, XA_CARDINAL, 32,
    PropModeAppend, (unsigned char *) &xa_prop, 1);
    xa = ATOM(_NET_WM_STATE);
    if (xa != None) {
    Atom xa_prop = ATOM(_NET_WM_STATE_STICKY);
    XChangeProperty(display, window.window, xa, XA_ATOM, 32,
    PropModeAppend, (unsigned char *) &xa_prop, 1);
    /* Skip taskbar */
    if (TEST_HINT(window.hints, HINT_SKIP_TASKBAR)) {
    /* fprintf(stderr, PACKAGE_NAME": hint - skip_taskbar\n");
    fflush(stderr); */
    xa = ATOM(_NET_WM_STATE);
    if (xa != None) {
    Atom xa_prop = ATOM(_NET_WM_STATE_SKIP_TASKBAR);
    XChangeProperty(display, window.window, xa, XA_ATOM, 32,
    PropModeAppend, (unsigned char *) &xa_prop, 1);
    /* Skip pager */
    if (TEST_HINT(window.hints, HINT_SKIP_PAGER)) {
    /* fprintf(stderr, PACKAGE_NAME": hint - skip_pager\n");
    fflush(stderr); */
    xa = ATOM(_NET_WM_STATE);
    if (xa != None) {
    Atom xa_prop = ATOM(_NET_WM_STATE_SKIP_PAGER);
    XChangeProperty(display, window.window, xa, XA_ATOM, 32,
    PropModeAppend, (unsigned char *) &xa_prop, 1);
    fprintf(stderr, PACKAGE_NAME": drawing to created window (0x%lx)\n",
    window.window);
    fflush(stderr);
    XMapWindow(display, window.window);
    } else
    #endif /* OWN_WINDOW */
    XWindowAttributes attrs;
    if (!window.window) {
    window.window = find_desktop_window(&window.root, &window.desktop);
    window.visual = DefaultVisual(display, screen);
    window.colourmap = DefaultColormap(display, screen);
    if (XGetWindowAttributes(display, window.window, &attrs)) {
    window.width = attrs.width;
    window.height = attrs.height;
    fprintf(stderr, PACKAGE_NAME": drawing to desktop window\n");
    /* Drawable is same as window. This may be changed by double buffering. */
    window.drawable = window.window;
    #ifdef HAVE_XDBE
    if (use_xdbe) {
    int major, minor;
    if (!XdbeQueryExtension(display, &major, &minor)) {
    use_xdbe = 0;
    } else {
    window.back_buffer = XdbeAllocateBackBufferName(display,
    window.window, XdbeBackground);
    if (window.back_buffer != None) {
    window.drawable = window.back_buffer;
    fprintf(stderr, PACKAGE_NAME": drawing to double buffer\n");
    } else {
    use_xdbe = 0;
    if (!use_xdbe) {
    NORM_ERR("failed to set up double buffer");
    if (!use_xdbe) {
    fprintf(stderr, PACKAGE_NAME": drawing to single buffer\n");
    #endif
    #ifdef IMLIB2
    cimlib_init(display, window.drawable, window.visual, window.colourmap);
    #endif /* IMLIB2 */
    XFlush(display);
    XSelectInput(display, window.window, ExposureMask | PropertyChangeMask
    #ifdef OWN_WINDOW
    | (own_window ? (StructureNotifyMask |
    ButtonPressMask | ButtonReleaseMask) : 0)
    #endif
    static Window find_subwindow(Window win, int w, int h)
    unsigned int i, j;
    Window troot, parent, *children;
    unsigned int n;
    /* search subwindows with same size as display or work area */
    for (i = 0; i < 10; i++) {
    XQueryTree(display, win, &troot, &parent, &children, &n);
    for (j = 0; j < n; j++) {
    XWindowAttributes attrs;
    if (XGetWindowAttributes(display, children[j], &attrs)) {
    /* Window must be mapped and same size as display or
    * work space */
    if (attrs.map_state != 0 && ((attrs.width == display_width
    && attrs.height == display_height)
    || (attrs.width == w && attrs.height == h))) {
    win = children[j];
    break;
    XFree(children);
    if (j == n) {
    break;
    return win;
    void create_gc(void)
    XGCValues values;
    values.graphics_exposures = 0;
    values.function = GXcopy;
    window.gc = XCreateGC(display, window.drawable,
    GCFunction | GCGraphicsExposures, &values);
    //Get current desktop number
    static inline void get_x11_desktop_current(Display *current_display, Window root, Atom atom)
    Atom actual_type;
    int actual_format;
    unsigned long nitems;
    unsigned long bytes_after;
    unsigned char *prop = NULL;
    struct information *current_info = &info;
    if (atom == None) return;
    if ( (XGetWindowProperty( current_display, root, atom,
    0, 1L, False, XA_CARDINAL,
    &actual_type, &actual_format, &nitems,
    &bytes_after, &prop ) == Success ) &&
    (actual_type == XA_CARDINAL) &&
    (nitems == 1L) && (actual_format == 32) ) {
    current_info->x11.desktop.current = prop[0]+1;
    if(prop) {
    XFree(prop);
    //Get total number of available desktops
    static inline void get_x11_desktop_number(Display *current_display, Window root, Atom atom)
    Atom actual_type;
    int actual_format;
    unsigned long nitems;
    unsigned long bytes_after;
    unsigned char *prop = NULL;
    struct information *current_info = &info;
    if (atom == None) return;
    if ( (XGetWindowProperty( current_display, root, atom,
    0, 1L, False, XA_CARDINAL,
    &actual_type, &actual_format, &nitems,
    &bytes_after, &prop ) == Success ) &&
    (actual_type == XA_CARDINAL) &&
    (nitems == 1L) && (actual_format == 32) ) {
    current_info->x11.desktop.number = prop[0];
    if(prop) {
    XFree(prop);
    //Get all desktop names
    static inline void get_x11_desktop_names(Display *current_display, Window root, Atom atom)
    Atom actual_type;
    int actual_format;
    unsigned long nitems;
    unsigned long bytes_after;
    unsigned char *prop = NULL;
    struct information *current_info = &info;
    if (atom == None) return;
    if ( (XGetWindowProperty( current_display, root, atom,
    0, (~0L), False, ATOM(UTF8_STRING),
    &actual_type, &actual_format, &nitems,
    &bytes_after, &prop ) == Success ) &&
    (actual_type == ATOM(UTF8_STRING)) &&
    (nitems > 0L) && (actual_format == 8) ) {
    if(current_info->x11.desktop.all_names) {
    free(current_info->x11.desktop.all_names);
    current_info->x11.desktop.all_names = NULL;
    current_info->x11.desktop.all_names = malloc(nitems*sizeof(char));
    memcpy(current_info->x11.desktop.all_names, prop, nitems);
    current_info->x11.desktop.nitems = nitems;
    if(prop) {
    XFree(prop);
    //Get current desktop name
    static inline void get_x11_desktop_current_name(char *names)
    struct information *current_info = &info;
    unsigned int i = 0, j = 0;
    int k = 0;
    while ( i < current_info->x11.desktop.nitems ) {
    if ( names[i++] == '\0' ) {
    if ( ++k == current_info->x11.desktop.current ) {
    if (current_info->x11.desktop.name) {
    free(current_info->x11.desktop.name);
    current_info->x11.desktop.name = NULL;
    current_info->x11.desktop.name = malloc((i-j)*sizeof(char));
    //desktop names can be empty but should always be not null
    strcpy( current_info->x11.desktop.name, (char *)&names[j] );
    break;
    j = i;
    void get_x11_desktop_info(Display *current_display, Atom atom)
    Window root;
    static Atom atom_current, atom_number, atom_names;
    struct information *current_info = &info;
    XWindowAttributes window_attributes;
    root = RootWindow(current_display, current_info->x11.monitor.current);
    /* Check if we initialise else retrieve changed property */
    if (atom == 0) {
    atom_current = XInternAtom(current_display, "_NET_CURRENT_DESKTOP", True);
    atom_number = XInternAtom(current_display, "_NET_NUMBER_OF_DESKTOPS", True);
    atom_names = XInternAtom(current_display, "_NET_DESKTOP_NAMES", True);
    get_x11_desktop_current(current_display, root, atom_current);
    get_x11_desktop_number(current_display, root, atom_number);
    get_x11_desktop_names(current_display, root, atom_names);
    get_x11_desktop_current_name(current_info->x11.desktop.all_names);
    /* Set the PropertyChangeMask on the root window, if not set */
    XGetWindowAttributes(display, root, &window_attributes);
    if (!(window_attributes.your_event_mask & PropertyChangeMask)) {
    XSetWindowAttributes attributes;
    attributes.event_mask = window_attributes.your_event_mask | PropertyChangeMask;
    XChangeWindowAttributes(display, root, CWEventMask, &attributes);
    XGetWindowAttributes(display, root, &window_attributes);
    } else {
    if (atom == atom_current) {
    get_x11_desktop_current(current_display, root, atom_current);
    get_x11_desktop_current_name(current_info->x11.desktop.all_names);
    } else if (atom == atom_number) {
    get_x11_desktop_number(current_display, root, atom_number);
    } else if (atom == atom_names) {
    get_x11_desktop_names(current_display, root, atom_names);
    get_x11_desktop_current_name(current_info->x11.desktop.all_names);
    void update_x11info(void)
    struct information *current_info = &info;
    if (x_initialised != YES)
    return;
    current_info->x11.monitor.number = XScreenCount(display);
    current_info->x11.monitor.current = XDefaultScreen(display);
    #ifdef OWN_WINDOW
    /* reserve window manager space */
    void set_struts(int sidenum)
    Atom strut;
    if ((strut = ATOM(_NET_WM_STRUT)) != None) {
    /* reserve space at left, right, top, bottom */
    signed long sizes[12] = {0};
    int i;
    /* define strut depth */
    switch (sidenum) {
    case 0:
    /* left side */
    sizes[0] = window.x + window.width;
    break;
    case 1:
    /* right side */
    sizes[1] = display_width - window.x;
    break;
    case 2:
    /* top side */
    sizes[2] = window.y + window.height;
    break;
    case 3:
    /* bottom side */
    sizes[3] = display_height - window.y;
    break;
    /* define partial strut length */
    if (sidenum <= 1) {
    sizes[4 + (sidenum*2)] = window.y;
    sizes[5 + (sidenum*2)] = window.y + window.height;
    } else if (sidenum <= 3) {
    sizes[4 + (sidenum*2)] = window.x;
    sizes[5 + (sidenum*2)] = window.x + window.width;
    /* check constraints */
    for (i = 0; i < 12; i++) {
    if (sizes[i] < 0) {
    sizes[i] = 0;
    } else {
    if (i <= 1 || i >= 8) {
    if (sizes[i] > display_width) {
    sizes[i] = display_width;
    } else {
    if (sizes[i] > display_height) {
    sizes[i] = display_height;
    XChangeProperty(display, window.window, strut, XA_CARDINAL, 32,
    PropModeReplace, (unsigned char *) &sizes, 4);
    if ((strut = ATOM(_NET_WM_STRUT_PARTIAL)) != None) {
    XChangeProperty(display, window.window, strut, XA_CARDINAL, 32,
    PropModeReplace, (unsigned char *) &sizes, 12);
    #endif /* OWN_WINDOW */
    #ifdef HAVE_XDBE
    void xdbe_swap_buffers(void)
    if (use_xdbe) {
    XdbeSwapInfo swap;
    swap.swap_window = window.window;
    swap.swap_action = XdbeBackground;
    XdbeSwapBuffers(display, &swap, 1);
    #endif /* HAVE_XDBE */
    I guess this is one of the important bits:
    switch (window.type) {
    case TYPE_DESKTOP:
    prop = ATOM(_NET_WM_WINDOW_TYPE_DESKTOP);
    fprintf(stderr, PACKAGE_NAME": window type - desktop\n");
    fflush(stderr);
    break;
    Reading the NET_WM spec (which all major WMs use as the standard more or less) does not tell me anything meaningful (at least not for me ):
    _NET_WM_WINDOW_TYPE_DESKTOP indicates a desktop feature. This can include a single window containing desktop icons with the same dimensions as the screen, allowing the desktop environment to have full control of the desktop, without the need for proxying root window clicks.
    If anyone could tell me what to replace, that would be great .

    Hi lewisspindlove,
    Thanks for your input,
    it doesn't happen when i have my desktop in a "single picture" mode, and,
    it doesn't happen on other accounts, because besides mine(Admin), there is only
    the Guest account and this does not occur on that account.
    I tried your method of removing the wallpapers folder from Libary, then I
    noticed that the computer will select ANY image which I last used when in
    "single picture" mode, not "Change picture every 5mins" mode.
    For example, let's say I have a picture which I saved in the Documents folder,
    and I use that in "single picture" mode; after which I revert back to the folder which contains the pictures I want for "Change picture every 5mins" mode (which is stored somewhere else).
    If i go to the Login window & log back in again, the computer selects the picture
    I last used (the one in the Documents folder) as my background, BUT, after 5mins the picture changes to the ones I'm using for "Change picture every 5mins".
    I hope I'm not confusing everyone!
    This is a complicated & weird but ANNOYING problem!
    Any ideas if an Archive & Install would help? Does that erase all of my stored data on my HDD?

  • Window manager that can scale individual window or virtual desktop?

    Xfig doesn't work well on high DPI screens, especially for users whose vision is not that great. The problem is that there is no configuration option to scale elements such as lines.
    I see two ways to solve the problem:
    Scale the Xfig window.
    Scale the virtual desktop on which Xfig is running. Other applications would be running on virtual desktops that are not scaled.
    Following a suggestion in the awesome mailing list, I looked into Wayland plus a compositing window manager. However, XWayland, the X compatibility layer, has issues with Xfig. So I guess that for now I’m stuck with X.org, and a window manager compatible with the X composite extension.

    Possible solutions:
    Pervert: Set up a virtual machine just for Xfig, then use xrandr to scale the desktop inside of the virtual machine.
    Saner: Run Xfig in a VNC server (or NX), then connect with a client that supports scaling, e.g. gtk-vnc.
    Could be nice: Run Xfig within Xephyr, an X server that runs in a window within X. However, scaling with xrandr doesn't work.
    Untested: Use the Compiz Ezoom plugin to scale part of the screen. One would somehow need to prevent windows from being positioned outside of the zoomed area, and also restrict mouse movement.
    Last edited by feklee (2015-04-06 11:27:07)

  • Yosemite reverts to a certain virtual desktop on startup.

    I'm working on one of the 2008 iMacs and I recently upgraded to Yosemite after skipping Mavericks.
    What I immediately noticed when I had changed to a desired wallpaper, initially, is that on starting up, restarting, or logging back in the wallpaper would switch back to the grey solid wallpaper.
    I deleted that.
    It would then revert to the next solid coloured wallpaper (blue).
    What I did after this was create a new folder and put my own desktop wallpapers in it, and used that.
    When I started up again the next time, it reverted to one of the default yosemite picture wallpapers in 'pictures'. I had a look at the setup for the desktop setups. There were 32. I deleted all but 2 of the virtual desktops, and changed the desktop wallpaper to be identical on both.
    I restarted and, again, got the picture of the yellowy-purple yosemite.
    I inspected the virtual desktops. Only 'desktop 1' had changed.
    I changed the order, so now that Desktop 1 became Desktop 2  (and vice versa).
    I restarted.
    Again I was greeted by the yellowy-purple yosemite. Once again I inspected the virtual desktops. I found that OS X had started up on Desktop 2 (which used to be desktop 1) even though I had restarted on Desktop 1.
    I'm out of ideas...anyone else having this problem?

    1. If you log in automatically, a bug in some versions of OS X will cause the desktop picture to revert to the default image at every startup. The only known workaround is to disable automatic login in the Users & Groups preference pane.
    2. If the selected Desktop picture is stored in an iPhoto library on an external drive, export it from iPhoto and move it to a folder on the startup volume. (Credit for this solution to ASC member janay.)
    3. If the desktop picture always reverts to a plain blue background, one of your login items may be causing the problem. The "TeamViewer" application can have this effect; see this thread. If it's not that in your case, rule out all other third-party login items as possible causes.
    4. If you have a MacBook Pro with automatic graphics switching, disable it temporarily in the Energy Saver preference pane, set the Desktop picture, then restart the computer and re-enable graphics switching.
    5. If none of the above applies to you, proceed as follows.

Maybe you are looking for