Launch system tray applet from i3blocks blocklett? - i3

Using i3wm and i3blocks.
I have the network manager and pulse audio applets running along side. I am wondering if there is a way to launch those applet from a block.
Anyone done this or have seen this done?

I have Networkmanager applet running on the status bar in i3. The only line I needed to add in the i3 config file is:
exec --no-startup-id nm-applet
It give me a nice icon, in the status bar which is clickable and allows me to choose the Wifi Network, I would like to join.

Related

Creating GUI interface like Linux Install

I'm looking into creating a menu for a virtual machine image that would allow the user to input certain information such as IP address, gateway, serial number, etc. in a graphical format similar to what the standard Linux OS install looks like... you know, the blue screen with options to select and text fields to input into with 'OK' and 'Back' buttons.
For reference to what I mean about 'standard linux install', the user experience would look like:
The user doesn't need access to the underlying Linux (Debian) OS or anything, just the ability to modify the things I want to allow them to. My goal is to have the GUI interface show up immediately after boot instead of the console prompt to log in (my current image does not have KDE or Gnome installed).
To get my started, I'm looking for someone to tell me what this type of program is called, and possibly some getting started resources.
Thanks!

Linux - Get to Shell before other driver boot up

How can I edit my startup scripts in linux so that I get to the login screen as soon as possible? I want all the other accessories (such as Bluetooth, Wifi, Ethernet) drivers to run ONCE I have gotten to the login screen and can now log into shell.
The only thing I can think of is to change the rmnologin order so that it runs before anything else. Is that a good idea?
Use a dependency based init tool like systemd or startpar, then if you still don't have prompt fast enugh dependency reasearch (or trial and error) would be in order. Also set your bios to fast boot. You can also boot into single user mode then change run level later if you want.

How does xTerm communicate with the XWindows session that contains it?

I want to script opening chromium in kiosk mode under Linux (openSUSE 12.3) and XWindows, while controlling which monitor chromium appear in. I also need to have this script be run outside of a standard xterm, e.g. via ssh into the machine where chromium AND the display will run (i.e. I want the application to appear on one of the displays of the machine I'm connecting to, not the machine I'm connecting from).
I can do everything I want by hand in xterm on the target machine, but I won't be running these scripts in xterm. Somehow, the xterm environment is special: it knows how to talk to the containing XWindows session, and in fact knows which actual monitor it is hosted on. For example:
When I ssh into the machine and try to run an XWindows GUI on the target machine's display, it (reasonably) complains "Can't open display". However, even when I set the DISPLAY environment variable to the same value I see in xterm, I still get the error (although it now includes the current DISPLAY value). I've also tried setting DISPLAY to a variety of permutations on ":X.Y", where X and Y are small integers, but again to no avail.
If I run chromium in --kiosk mode from xterm, it takes over the monitor that currently contains the xterm window. If I drag xterm to my other monitor then chromium will launch in that monitor. I want that control when I launch chromium from my script, but can't figure out the background magic.
For window manipulation, I've seen suggestions to use wmctrl or devilspie, but I'm a bit nervous about depending on tools that haven't been updated in years. I'd also prefer to have chromium launch in the right place right off the bat, rather than having it appear in the wrong place and then be moved. And neither app can help me launch the app remotely.
So, here are the questions. First, how does xterm tell chromium how to connect to the right XWindows session and monitor? Second, how do I simulate that from a completely separate ssh connection? (Again: it's more than just the DISPLAY variable.)
Thanks,
Dan
You can't open X client on the target machine's display because of permissions: not anyone that can ssh into a machine may "take ownership" of it's screen. These are things controlled by xset -- read up on it.
As for the display: I assume that the specific monitor is controlled by the second part of the DISPLAY environment. At least that's what I remember from reading about X. I've never actually worked in a multi-monitor X environment.
Xterm is not special. Your mouse pointer is. Chromium will appear on the monitor your mouse pointer happens to be in. This is probably the default behaviour of your window manager.
Chromium does not respect the usual window position requests. You cannot tell Chromium where to appear, you must tell your window manager where to place the Chromium window. Methods of doing that, if they exist, totally depend on what window manager you have.
If you ssh to your machine as the user that has started the X session, you should have no problem connecting to that session.

How to launch firefox from C program/daemon under Linux

I am having some problems with launching firefox from a Linux daemon written in C.
When I launch firefox on the machine itself (via terminal) from the command shell using /usr/bin/firefox it works OK and a firefox browser window lanunches as it should.
However if I try this within my C daemon using system("/usr/bin/firefox"), firefox launches its process in the terminal but the browser window is not opened?
A similar thing happens when I try to do this using remote terminal acces. It's something to do with telling the system to open firefox in window mode rather than trying to open it in terminal mode - but I dont know how to specify this using bash commands?
I am using Lubuntu 11.10 in my Linux System.
Any help is most appreciated.
There's a reason I asked why you're attempting to do what you want. I didn't want to get into great details in my comment.
Firefox on Unix is an X-Window process (most of the Linux/Unix desktops are based upon the X11 protocol which is the heart of X-Window). What X-Window does is separate the display of the program from the process running the program. For example, I am now running Firefox from a Linux box at work, but the Linux box is actually displaying the Firefox browser window at home on my Mac.
In order to do this, I had to:
Run X11 on my Mac. The X11 program creates a default X11 client display called 0.0 which pretty much says the first screen and the first instance of X11 running (computer geeks like counting from zero). The process runs in the background on my Mac. In a certain sense, it's really a server process and not a client because it's waiting on port 6000 for a client X11 process (Firefox) to tell it what to do.
Before I run firefox, I have to tell my Mac's X11 process that I grant the X11 server running Firefox to be able to display on my X11 client process. Otherwise, you can imagine someone spamming another person by continuously popping up Windows on their display. You can use the xhost program to do this.
In order to run Firefox on the Linux box, I have tell the Firefox process what X11 client I'm running it on. I can do this by setting the DISPLAY environment variable to something like "10.0.1.33:0.0". This means the X11 client is running the the machine on IP address 10.0.1.33, and I want you to use the first screen, and the first instance of the X11 client on that screen.
Now, I can run Firefox on my Linux box, and the display will display on my Mac.
The problem you're running into is that there's simply no X11 client when you're starting FireFox as a daemon process. An X11 client is associated with a user and a display of some sort. The display could be a virtual display, but there's got to be an X11 client that's running and is addressable in some way, so the process knows where to display the output.
By the way, you said daemon which has a very, very specific meaning in Unix/Linux. A daemon is a process that runs in the background and usually has a service (and a port) associated with it. For example, there's an FTP daemon called ftpd, the mail server uses the sendmail daemon, ssh has the sshd daemon. Daemons have no display associated with them.
However, it looks like you might be using the word to mean launching Firefox via another process. Is that true? If so, you'll have to make sure that Firefox knows the X11 display to use (there's a command line setting to use to specify the display), and that your X11 client (your login session) has given permission for another process to update your display with the program window.
Can you please explain what you're trying to do in a bit more detail? If you simply want to download a file from a remote http server (which of course is running the http daemon process called httpd), you should use curl or wget which don't require a display and are way simpler to use. If you're trying to do something else, let us know exactly what it is.
Firefox needs to know which display it should open on. When you run it from within a gui, even through a terminal emulator, the DISPLAY environment variable is set to the appropriate value. When you launch from the daemon, try system("/usr/bin/firefox -display=:0").
Make sure that the DISPLAY environment variable is properly set in your daemon to refer to the X server that you want your firefox to use.
If the daemon is run as a different user account than the user account that "owns" the X server that you want to use, you will also need to use xauth(1) to configure the authentication token to grant permission to use the X server.
Often times, it is far easier to use ssh -X to tunnel X and properly configure the xauth(1) tokens in one go than try to manage xauth(1) tokens yourself. Maybe adding ssh -X into your environment would be suitable, maybe not. (I've even used ssh -X root#localhost before when I needed to run an X client as root and didn't want to bother with configuring xauth(1) manually. ssh(1) is just so much easier.)

About mouse controlling in c/c++ [ubuntu] gnome or kde??? probably

Several questions about how to write a mouse controlling module in c/c++
Any comments are much appreciated.
I have a mobilephone which can connect to my ubuntu 11.04 laptop
through wireless network.
I installed a putty for nokia symbian s60 v3.
With putty, I can execute commands such like mplayer in order to play
music when i am in my bed.
The problem is putty cannot controll mouse directly.
I am thinking if I can write a program who receives arrow keys signals
from my putty and move the mouse from my desktop.
Then I can control my laptop when I am doing a presentation through my
mobile-phone.
If anyone knows how to deal with it, please give me some advices.
Where should i get started? which c/c++ header/libs that i have to use.
Any websites or online mannual that i should take a look at.
I am running unity (based on gnome 2.3. right?)
Thanks.
Guannan
This is actually not simple on linux/X window system, but it can be done. Probably one of the following would be your answer:
set up xtest so that you can inject mouse events into the window system
tell the window manager to take input from a "fake mouse" of some sort - maybe you can tell it that a named pipe or even pty is a serial mouse?
make or find a kernel driver giving you another mouse entry under /dev/input to which you can push mouse events from some other program

Resources