'Virtual Desktop'?

I am looking at upgrading from a PC to a MAC soon. I am debating between an iMac and MacBook Pro. My fiancée and I were discussing the iMac and iPad and we wondered whether there was an app that would allow me to essentially run my iMac from the iPad? Kind of like a 'virtual desktop' application.
I apologize if this isn't the correct forum spot to ask this question...I'm simply trying to get answers before spending a lot of money on a new system. if I can run my iMac from an iPad, for instance, then I wouldn't necessarily need the portability that a MacBook offers...and I'd have the power of the iMac that I desire.
Thanks for your time!

Thanks...did the search. All I can say is AWESOME! Look out MAC here I come!

Similar Messages

  • 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.

  • No virtual desktops in Win10 (please fix)?: Dangerous game promoting app switching on different displays as virtual desktops

    Seems virtual desktops are overpromoted - and in fact not about virtual desktops (changing content on the desktops). The socalled virtual desktops are right now
    no more than app switching on different displays.
    Dangerous game again from Microsoft promoting things as something they are not.
    Virtual desktops are already a well-defined concept - and people will expect the desktop to be able to change content (be dynamic) ... the data and launching programs for documents, different backgrounds.
    ... but as others may already have stated in other threads: (Right now) Windows 10 does not contain virtual desktops/displays/screens. Not at all.
    A skeptical hypothesis - hopefully it is not so, and we will be able to work with data in a valuable way. The data is on the desktop anyway today - so why not make it real virtual desktops? I simply do not understand the decision.
    So here comes the skeptical hypothesis - it's not a Steve thing. It's Microsoft still looking for that next revamped business model to finance their future.
    So the freak kind of virtual desktops (virtual desktops in Win10 a lie?) will disappoint - have already begun to do so - and seems Microsoft is just taken up with inserting an additional intermediary step towards relaunching the appstore and hiding
    all the user data in cloud again. Really, hiding the difference between data availability - not making the cloud something MORE but making the local system something LESS. The NEXT BIG thing? So we're going to loose file system, folders and the general ability
    to form concepts of our own - and get a freak system? The NEXT BIG thing - data integration? Because data was hidden away now. Also in local systems. Artificially creating new problems - rather than solving new interesting ones?
    We need to able to pin the data onto the display whether desktop, start screen, what ever. It's also on the feature requests. Desktops/Start Screen/Original displays for workflows/whatever actual starting points on login ... needs to have
    more links than application from appstores and application containers linked to them.
    If any more app (read: not cloud, data) but appstore, appstore, appstore
    application containers hiding the data away comes into the UI I am going with Linux. I am that close ...

    A better name would be Virtual Display Layouts ... Virtual Screens ... Virtual Start Screens (please let us be able to pin files/folders to the Start Screen, a requested voted for feature for Windows 10).
    You see, go back and read the topics for Windows 8 ... you will learn the Start Screen is/was the new desktop - and should have been made virtual.
    So please get your act together and stop confusing everything ... and make on coherent system. Drop the Start Screen - and go with the virtual desktop
    (put the Start Screen technology into the virtual desktop - and let users pin folders and files there as requested ... both local and in the cloud)

  • APP-V 5.0 VDI A Temporary Profile is created when I log into the Virtual Desktop

    Dear Sirs
    I'm Enzo , an Italian System Engineer. Together with other fellows we created a test environment :
    - a VDI machine (POC-VDI,10.102.94.219, Windows Server 2012 R2) with
      RD Web Access, RD Connection Broker, RD Virtualization Host, RD Session Host Installed
    The Hyper-V Environment includes :
    - DHCP Server (to provide addresses to Virtual Desktop Collections)
    - APP-V_5.0_Server , Application Virtualization Management Console 5.0, with 2 published packages (Office 2010 and Open    Office 4)
    - Sequencer_W8-1, Application Virtualization Sequencer 5.0
    - Client_8-1 , Client Windows 8.1 with Application Virtualization Client 5.0
    From the Client_8-1 we can download and run the two published packages from the server (user VDI_TEST_1)
    The Client_8-1 has been used as the template (sysprep /oobe /generalize /shutdown) for the Virtual Dektop (APP-0 and APP-1)
    included in the collection 'APPV' (Pooled, Automatically Manage Virtual Desktop, Roll Back Virtual Desktops Enabled).
    I connect to the 'RD Web Access' ( http 10.102.94.219 RDWeb, user VDI_TEST_1) , I then connect to APPV collection .
    When I get logged into the Virtual Desktop (APP-0 or APP-1, user VDI_TEST_1), a Temporary Profile is created. Why ?
    We configured :
    User Profile Disk :  share Location  10.102.94.219  UPD
       UPD : Share      Everyone Full Control
                                  Security   SYSTEM    Full Control
                                             Network Service 
    Full Control
                                            POC-VDI$   Full
    Control
                                             Administrators (POC-VDI\Aministrators) 
    Full Control
                                             Users (POC-VDI\Users) 
    Read & Execute
    I am puzzled as long as when I get logged into the Virtual Desktop, a Temporary Profile is created. Why ?
    Thanks in advance for your kind attention
    Enzo

    Highly unlikely it has anything to do with App-V.
    Start troubleshooting by looking at permissions on shares and folder under the shares for the profile.
    Tim Mangan MVP for App-V and Citrix CTP Author of AppV books: "The Client Book" and "OSD Reference Book" (http://www.tmurgent.com/Books )

  • How to delete Ubuntu virtual desktop and free up allocated space in windows 8?

    I have tried out Hyper-V for the first time to install Ubuntu desktop. During the installation process, 10GB of space is allocated. I believe this space would have been  created as a separate partition and formatted
    to linux file system. Please correct me if I am wrong.
    Now I would like to remove the Ubuntu virtual desktop and free up the allocated space. I have deleted the desktop from the Hyper-V manager. Is this sufficient to free up the space?
    Disk partition tool shows following partitions
    Volume
    Layout
    Type
    FS
    Status
    Capacity
    Free
    Volume (C;) Simple
    Basic NTFS
    Healthy(Boot, Page File ...) 218GB
    8GB 
    Volume <nolabel>  Simple
    Basic Healthy(Recovery Partition)
    450MB 450MB 
    Volume <nolabel> 
    Simple
    Basic
    Healthy(Recovery
    Partition)
    350MB
    350MB 
    Volume <nolabel> 
    Simple
    Basic
    Healthy(Recovery
    Partition)
    10.5GB
    10.5GB 
    Volume <nolabel> 
    Simple
    Basic
    Healthy(EFI
    System Partition)
    260MB
    260MB 
    Volume <nolabel> 
    Simple
    Basic
    Healthy(Primary
    Partition)
    8GB
    8GB
    I am not sure of the unnamed, unused volume. Hence I listed all.
    However Diskpart tool in command prompt does not show the last one [ 8gb]. Does this mean if this was allocated
    to Virtual desktop? Please help 

    You must delete the VHDx that you created when you created the VM.
    This is the virtual disk that Ubuntu was installed into - you will not see this as a volume, you will see this as a VHDx file.
    Brian Ehlert
    http://ITProctology.blogspot.com
    Learn. Apply. Repeat.

  • Screen Sharing and Virtual Desktop

    Is there a way to force a new remote screen sharing connect to a "Virtual Desktop"?
    In my experience, if another user is logged into the computer the new remote screen connection will be forced or given the option to connect to a virtual desktop. This will allow the new connection to run in the "background" without the first connection being influenced.
    The issue is when a new remote connection is initiatied and no other connections are active the new connection will be shown on the computer's hardware monitor. i.e. No option is given to connect via a virtual desktop.
    This is a security issue because a user can connect remotely and if he is the only connection on the computer he will have all his work shown on the hardware display.
    I am hoping to find a way to force all remote connections to be on virtual desktops.

    I guess its worth mentioning that although you can indeed screen share from Leopard to Tiger, it only works when you are on the same network. But Remote Desktop works across the internet...
    Of course the trick to using Remote Desktop from a truly "remote" location elsewhere on the internet is that you have to be able to reach the IP of the computer you want to control, which can be tricky if its behind a NAT and the person your trying to reach is my Mom who has no idea how to configure her NAT, or firewall, or even find her IP address without my help.
    Screen sharing Leopard to Leopard via iChat should be much more straight forward... translation: this will make my life much easier the next time my mom needs help.

  • What licenses do I need to get a virtual desktop environment up and running?

    I’m trying to figure out what licenses I need to get a full Windows Virtual Desktop Infrastructure (VDI) up and running with the Remote Desktop Service (RDS) roles.
    I have Win.Server 2012 running Hyper-V, which has about 10 different virtual machines (VM) with either Win.7 or Win.8 installed on it. These VMs will act as virtual desktops (VD) for about 200 people to remotely access and use.
    My question is, what licenses do I need to support this scenario?
    So far, I’m planning to purchase a few Windows Server 2012 Standard Edition with 10 Client Access Licenses ( $1414.19 each). I’m assuming that’s 1 license for the server and 10 Client Access Licenses (CAL) for users who will access the VDs. I’m also planning
    to buy about 200 RDS CALs ($149 each) for the rest of the users to access the VDs. Do I need to buy additional licenses for each VM image I create (the 10 images I mentioned earlier)? These VMs are in a pooled virtual desktop collection, so they reset themselves
    when users disconnect from them. If I have personal desktop collections which give unique desktops to each user and saves their settings, will my license have to change if I have that too?
    At first I thought just buying the RDS CALs will allow me to install windows where ever I want, how many times I want and all I have to worry about is paying for the client access, but do I need to pay for the OS as well? So essentially I’m doubling the
    license?
    A side question not really related is, if I have Windows Thin PC, (which was said to come free if I have SA with another product)  and bought the Windows Server license, does that come with SA and I can install Windows Thin PC as many times as I want
    on which ever desktop I have that will connect to this VDI system?

    The 10 server licenses are fine, but they don't help you with VDI or remote desktops. I you want to install the Remote Desktop Session Host (formerly known as Terminal Server) role on all your servers und provide remote desktops for your 200 users, 200 RDS
    CALs are the right choice (per user or per device).
    But if your 200 users have access to virtual desktops, you need 200 VDI licenses. It doesn't matter if you only have 10 virtual desktops if potentially all your 200 users have access to them. VDI licensing is not based on a concurrent model, so every client
    that can connect to a VM needs its own license. If Windows 8 Enterprise with SA is on all your client devices, you're set because SA gives users access rights to up to 4 Win8 or Win7 VMs concurrently (local or remote). In addition
    it gives them a so-called companion subscription license for personally owned, non-primary devices.
    For those primary corporate devices that are without SA, you'll need to purchase a single VDA license for each device that connects to any number of your Win7 or Win8 VMs. The same applies to personally owned devices of users who don't have a primary
    corporate device with SA. In other words, BYOD is supported if your primary device is under SA.
    For neither VDI/SA nor VDA it does matter if users are connecting to different VM images or only one. Typically, they cannot connect to more than 4 VMs at the same time in order to stay within the licensing limits.
    Benny

  • How do you remove virtual desktops from a Windows Server 2012 R2 Pooled VDI collection

    All - I have created a Pool VDI Collection with 15 total virtual desktops in it. I need to reduce the number of virtual desktops in that collection to five. I have searched through the GUI, TechNet and done a number of Google searches but nothing helpful
    comes back. Does anyone know how to do this?
    I am guessing I cannot just delete them out of Hyper-V since the collection knows how many desktops it is supposed to have assigned to it.
    Thanks in advance.
    Will Smothers

    Hi Will,
    Thank you for posting in Windows Server Forum.
    We can use PowerShell command “Remove-RDVirtualDesktopFromCollection“ to achieve your goal.
    PS C:\> Remove-RDVirtualDesktopFromCollection -CollectionName "Virtual Desktop Pool" -VirtualDesktopName @("RDS-WKS-A27") -ConnectionBroker "rdcb.contoso.com"
    More information.
    Remove-RDVirtualDesktopFromCollection
    http://technet.microsoft.com/en-us/library/jj215515.aspx
    Hope it helps!
    Thanks.
    Dharmesh Solanki

  • Remote desktop virtualization setup - can't identify virtual desktop state

    I'm experimenting with MS's vdi offering and have hit a problem when selecting the Remote Desktop template virtual machine.
    The Error (translated from spanish)
    'Cannot identify the virtual desktop state. Verify that the remote desktop virtualization host server hypervsrv is available on the network and that the virtual desktop VDIBaseWin7 is closed'
    What I've got:
    A Windows 2012 R2 with hyper-v
    A Windows 2012 Std on which I am trying to configure Remote desktop virtualization
    A virtual machine with Windows 7 pro. The machine is basic win 7, patched and has been sysprepped.
    How I get there:
    From server manager I open Remote Desktop Services > from the wizard área above I click on (3) Create remote desktop collection
    This opens the wizard where I choose a name for the collection
    I then select 'personal virtual desktop collection' and 'créate and adminístrate virtual desktops automatically'
    The wizard then presents me with a list of virtual machines. I then select the sysprepped wind 7 pro machine (which is shut down naturally). I've tried generating the win7 machine as a generation 1 and generation 2 - the result is the same.
    The wizard pauses for a few moments and then displays:
    'Cannot identify the virtual desktop state. Verify that the remote desktop virtualization host server hypervsrv is available on the network and that the virtual desktop VDIBaseWin7 is closed'
    Neither the event log of the hyper-v server, nor the rds server, report anything.
    So, my question is, whats failing? Its obvious that its trying to perform some action and is failing. The question is, whats it trying to do. If I knew what it was doing then I could investigate the cause, but the error doesn't say much.
    Anyone have any ideas?

    strange, This question has been moved to the remote desktop forum. I would have thought this forum was more for the traditional terminal server type questions.
    Anyway, I found a solution to my own problem. It turns out to be the mix of 2012R2 for hyperv and 2012 std for the broker, etc.
    I set up another server with 2012r2 and followed the same sequence to configure it with the rds roles and it worked perfectly.

  • Win 2102: existing number of virtual desktops is not valid after errors while deleting , how to fix it ?

    Hello everyone,
    I created a virtual desktop collection with a name format like this , prefix = VDI-, suffix= 1 .
    so when I created the first VMs , I had VDI-1 and VDI-2 , later after recreating the VMs, adding new ones and deleting others, the suffix numbers are no longer in sequence , like I started having VDI-1,VDI-2,VDI-8,VDI-9.
    I realized I had one problem that probably caused this, because when I delete a VM , I get a warning message:
    "RD connection broker could not delete the computer account object from active directory."
    so I searched about that error and I added the needed permissions and now deleting seems to work without any warning.
    now I have two VMs, when I go through the wizard , the first page it shows I have 2 VMs but in the second page it shows I have 11 ! is there a way to reset the count ? if I delete the entire collection and create it again , will I have any problem with the
    roaming users profiles ?
    Thanks

    Hi,
    Thank you for your posting in Windows Server Forum.
    You can specify the count for RDVH as how many desktop wants for particular host. You can do this “Specify Virtual Desktop allocation” while creating virtual desktop collection. Other than that you can also use PowerShell command to achieve your task.
    For more details you can refer beneath article.
    1. Fumbling through Windows Server 2012 Virtual Desktop Infrastructure (VDI)
    2. Deploying VDI for RDS 2012 / 2012R2 – Part II – Publishing a Windows 7 Pooled Desktop
    Hope it helps!
    Thanks.
    Dharmesh Solanki

  • Windows Server 2012 Pooled Virtual Desktop collection GetVMstate issue

    I am trying to create a Pooled Desktop collection with my Powered off VM and it errors out The
    virtual desktop must be in a stopped state:  Could not identify the state of the virtual desktop.  Ensure that the RD virtualisation host server is available on the network and the virtual desktop is shut down
    In the debug logs it shows.
    Component RdmsModel: GetVMstate for Vm Win7_BaseVM failed with error 16386
    Component RDExceptionHandler: Could not identify the state of the virtual desktop. Ensure that the RD Virtualization Host server sunflower-1.HYPERQA.NUTANIX.COM is available on the network and that the virtual
    desktop Win7VMSF is shut down.
    Please help on resolving this GetVMState issue.

    Hi Krishna,
    Thank you for posting in Windows Server Forum.
    When you are configuring RDVH initially, please see that you have meet prerequisites. Remember that you need these pre-requirements:
    • Database based on SQL Server 2008 R2
    • Static IP Address for all Broker
    • Round Robin DNS
    • All RD Broker must be members of AD Windows Group (es. RDCB Server Group)
    • The group must be insert into SQL Server as sysadmin ONLY for the DB creation. After that DB will be created give the db_owner permission only for their DB
    More information.
    Windows Server 2012 R2: Unable Add New VDI Template
    In addition, we need all RD Broker must have the same SQL Native Client as main SQL Server (es. SQL Server 2012 SP1). The Connection Broker server's computer account MUST be a member of the local administrators group on the Virtual Host (RDS Host) machine and
    then reboot the server. Finally check the result.
    Windows Server 2012 Virtual Desktop Template Issue
    Hope it helps!
    Thanks.
    Dharmesh Solanki

  • 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.

  • (Solved) Issue with 2012 & 2012 r2...Creating New Virtual Desktop Collections Fails

    Hi all, thought I would share a fix I found out after hours of pulling my hair out.
    If you get the following error when creating a new RD Collect: "The virtual desktop must be in a stopped state: Could not identify the state of the virtual desktop. Ensure that the RD virtualization host server is available on the network and
    the virtual desktop is shut down"
    ENSURE your RD Connection Broker and RD Virtualization Host are both either 2012 or 2012 r2.  I was unable to create new VD Collections until I moved my Connection Broker from a 2012 box, to a 2012 r2 box. (My RD Virt Host is 2012 r2.) Once I did that,
    everything worked fine.

    Hi,
    Thanks for your good sharing.
    I think it will help the people who have the same issue.
    Have a nice day.
    Regards.
    Vivian Wang

  • Adobe Reader 9.4.5 & Virtual Desktop Infrastructure compatibility ?

    I am seeking following information on Adobe Reader 9.4.5 in regards to MS Virtual Desktop Infrastructure compatibility, below are questions:
    1. Is the application – Adobe Reader 9.4.5 supported on Windows 7 x64 desktop virtualised on Windows Server 2008 R2 Hyper-V presented by Citrix XenDesktop 5.5/5.6 ?
    2. Is the virtualization of the application supported ? [We are Planning to virtualize the Application using Microsoft App-V/Citrix ] ?
    3. Is the application supported if installed on Virtual Machines [VDI] ?
    4. Does the Application’s current License Policy support if the Application is virtualized ?
    5. Does the Application’s current License policy support the Application on Virtual Machines?
    If not is there any license policy that supports the Application on Virtual Machines ?

    You can remove the corrupted installation using the Windows Installer CleanUp Utility.

  • 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)

Maybe you are looking for