I am running the awesome window manager on trusty after having upgraded from raring. My desktop environment intentionally does not have all the Gnome / Freedesktop daemons running — I don't want them.
When I execute gedit
from a terminal like this:
gedit file
It outputs messages like this all over my terminal whenever I hit enter or save or on various other occasions:
(gedit:5700): Gtk-WARNING **: Calling Inhibit failed: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.SessionManager was not provided by any .service files
I understand the meaning of this warning and I have decided that it doesn't matter to me.
How can I turn off this kind of warning? By "turn off", I don't mean any of these or similar workarounds:
- piping the output of gedit into
/dev/null
- writing a wrapper script that pipes the output of gedit into
/dev/null
- creating an alias that pipes the output of gedit into
/dev/null
These workarounds are not acceptable as they have to be applied individually to each Gnome application — gedit is not the only one that likes to mess up the terminal.
First, I also find it annoying that these warnings show up on an out-of-the-box Ubuntu, with no "proper" method to disable them which I could find (it seems that the most common "solution" is either to install
gir1.2-gtksource-3.0
which doesn't seem to work since it's already installed, or to ignore them - but I want to suppress them completely since they just make my terminal noisy).I came up with the following code which so far seems to behave exactly how I'd expect it to, and is based on the answer by TuKsn, but enhances it a bit to:
gedit ...
) without needing to use F12 or some other shortcut (to invoke unfiltered use/usr/bin/gedit ...
).Can still be generalized a bit, but for now, if you need the same treatment for other commands, duplicate the
gedit()
function for each other command name which needs the same filter.And a better version (way smaller, fully generic, no need to rewrite history since invoked as is, and better for filtering per line rather than the whole output):
Its also a workaround, but you don't have to apply this for every application.
Write this to your
.bashrc
and you can use this wrapper with F12 (or chose another key) to suppress the warnings:I actually wrote the hide-warnings tool in C which I find much easier to use than the script shown above. Also, it will write all the output written to
stdout
by default (because the Gtk and other warnings are sent tostderr
so it parsesstderr
notstdout
by default).One big problem with the script above is that it won't write anything to your console, even if it does not match the regex, until done. This is because it saves all the data in a variable and then grep that variable once done. It also means that it will save the output in that variable possibly using a lot of memory (at least you should save that in a temporary file.) Finally, from what I can see, the grep will prevent any display if any one line matches. Maybe not exactly what you want.
The tool can be used in a simple alias like this:
(I use
gvim
... I'm sure it would work withgedit
too.)The file is self contained, no dependencies other than the C library, so you can get a copy and easily compile and install it:
There is some further documentation in the file and you can use
--help
once compiled for quick docs.The newer version, which at some point will make use of the advgetopt library, is in C++.
I was looking to find a utility to solve this sort of problem, myself.
My issues with the provided answers are as follows:
I appreciate the attempts I've seen to do this with Bash, however, I failed to identify a solution that achieved all 3 of the conditions outlined above.
My ultimate solution is written in NodeJS, which I understand will not be installed on many linux boxes. Before choosing to write the JS version, I attempted to code it in python, and found the async IO library is pretty ugly and broken until VERY recent versions of python (~3.5 which is available out-of-box on SOME newer distros).
Minimizing dependencies was the ONLY reason to choose python, so I abandoned it for NodeJS, which has a remarkable set of libraries for somewhat low-level, async-oriented IO.
Here it is:
To use this script, you might add these lines to your .bashrc:
The subprocess you choose to run will inherit stdin, so you are free to use BASH pipes or redirection.
One solution is to create a function to suppress the Gtk error messages.
Sometimes, it's not obvious where the error is coming from.
For example, if you have the following in your .gitconfig, which tells git to use meld to as it's git difftool:
And then you attempt to diff a your .bashrc file:
You might get a lot of annoying Gtk error messages:
Create a function that will redirect your output and stderr to /dev/null
Now, when you run
git-difftool .bashrc
, you'll see no more Gtk error messages.A side benefit is that by adding the ampersand control operator in the definition of the git-difftool function, you can run this command in the background, which will free up your terminal, s.t., you can run other commands along with your meld difftool window.