Saya menjalankan window manager yang luar biasa dengan amanah setelah ditingkatkan dari raring. Lingkungan desktop saya sengaja tidak menjalankan semua daemon Gnome / Freedesktop - Saya tidak menginginkannya.
Ketika saya mengeksekusi gedit
dari terminal seperti ini:
gedit file
Ini menampilkan pesan seperti ini di seluruh terminal saya setiap kali saya menekan enter atau save atau pada berbagai kesempatan lain:
(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
Saya mengerti arti dari peringatan ini dan saya telah memutuskan bahwa itu tidak masalah bagi saya.
Bagaimana saya bisa mematikan peringatan semacam ini? Dengan "mematikan", saya tidak bermaksud salah satu dari ini atau solusi yang serupa:
- memipipkan keluaran gedit ke
/dev/null
- menulis skrip wrapper yang menyalurkan output gedit ke
/dev/null
- membuat alias yang menyalurkan output gedit ke
/dev/null
Penanganan masalah ini tidak dapat diterima karena harus diterapkan secara terpisah untuk setiap aplikasi Gnome - gedit bukan satu-satunya yang suka mengacaukan terminal.
export GCONF_DEBUG="no"
akan melakukan apa punJawaban:
Pertama, saya juga merasa menjengkelkan bahwa peringatan ini muncul di Ubuntu out-of-the-box, tanpa metode "tepat" untuk menonaktifkannya yang bisa saya temukan (tampaknya "solusi" yang paling umum adalah menginstal
gir1.2-gtksource-3.0
yang sepertinya tidak berfungsi karena sudah diinstal, atau mengabaikannya - tapi saya ingin menekan mereka sepenuhnya karena mereka hanya membuat terminal saya berisik).Saya datang dengan kode berikut yang sejauh ini tampaknya berperilaku persis seperti yang saya harapkan, dan didasarkan pada jawaban oleh TuKsn, tetapi sedikit meningkatkannya untuk:
gedit ...
) tanpa perlu menggunakan F12 atau jalan pintas lainnya (untuk memohon penggunaan tanpa filter/usr/bin/gedit ...
).Masih bisa digeneralisasi sedikit, tetapi untuk saat ini, jika Anda memerlukan perlakuan yang sama untuk perintah lain, duplikat
gedit()
fungsi untuk setiap nama perintah lainnya yang memerlukan filter yang sama.Dan versi yang lebih baik (jauh lebih kecil, sepenuhnya generik, tidak perlu menulis ulang sejarah karena dipanggil apa adanya, dan lebih baik untuk memfilter per baris daripada seluruh output):
sumber
Ini juga merupakan solusi, tetapi Anda tidak harus menerapkan ini untuk setiap aplikasi.
Tulis ini untuk Anda
.bashrc
dan Anda dapat menggunakan pembungkus ini dengan F12 (atau memilih kunci lain) untuk menekan peringatan:sumber
Saya benar-benar menulis alat sembunyikan-peringatan di C yang menurut saya jauh lebih mudah digunakan daripada skrip yang ditunjukkan di atas. Juga, ia akan menulis semua output yang ditulis
stdout
secara default (karena Gtk dan peringatan lainnya dikirim kestderr
sehingga mem-parsingstderr
bukanstdout
secara default).Satu masalah besar dengan skrip di atas adalah tidak akan menulis apa pun untuk konsol Anda, bahkan jika itu tidak cocok dengan regex, sampai selesai. Ini karena ia menyimpan semua data dalam suatu variabel dan kemudian mengambil variabel itu setelah selesai. Ini juga berarti bahwa itu akan menyimpan output dalam variabel yang mungkin menggunakan banyak memori (setidaknya Anda harus menyimpannya dalam file sementara.) Akhirnya, dari apa yang saya lihat, grep akan mencegah tampilan apa pun jika ada satu baris yang cocok . Mungkin tidak persis seperti yang Anda inginkan.
Alat ini dapat digunakan dalam alias sederhana seperti ini:
(Saya menggunakan
gvim
... Saya yakin itu akan berhasilgedit
juga.)File ini mandiri, tidak ada dependensi selain dari C library, sehingga Anda bisa mendapatkan salinan dan dengan mudah mengkompilasi dan menginstalnya:
Ada beberapa dokumentasi lebih lanjut dalam file dan Anda dapat menggunakan
--help
sekali dikompilasi untuk dokumen cepat.Versi yang lebih baru , yang pada titik tertentu akan menggunakan perpustakaan advgetopt, ada di C ++.
sumber
Saya mencari utilitas untuk menyelesaikan masalah semacam ini, saya sendiri.
Masalah saya dengan jawaban yang diberikan adalah sebagai berikut:
Saya menghargai upaya yang saya lakukan untuk melakukan ini dengan Bash, namun, saya gagal mengidentifikasi solusi yang mencapai semua 3 kondisi yang diuraikan di atas.
Solusi pamungkas saya ditulis dalam NodeJS, yang saya pahami tidak akan diinstal pada banyak kotak linux. Sebelum memilih untuk menulis versi JS, saya mencoba kode itu dalam python, dan menemukan perpustakaan IO async cukup jelek dan rusak sampai SANGAT versi terbaru dari python (~ 3.5 yang tersedia di luar kotak pada BEBERAPA distro yang lebih baru).
Meminimalkan dependensi adalah SATU-SATUNYA alasan untuk memilih python, jadi saya meninggalkannya untuk NodeJS, yang memiliki seperangkat pustaka yang luar biasa untuk IO tingkat rendah yang berorientasi pada tingkat rendah.
Ini dia:
Untuk menggunakan skrip ini, Anda dapat menambahkan baris ini ke .bashrc Anda:
Subproses yang Anda pilih untuk dijalankan akan mewarisi stdin, jadi Anda bebas menggunakan pipa BASH atau pengalihan.
sumber