MEMPERBARUI
Pengembang Jeremy Huddleston Sequoia mengumumkan kemarin bahwa masalah ini diselesaikan di XQuartz 2.7.8_beta2 :
XQuartz 2.7.8_beta2 tersedia untuk diunduh.
Anda dapat melihat http://xquartz.macosforge.org/trac/wiki/X112.7.8 untuk set lengkap perubahan, tetapi yang paling penting adalah:
1) xauth sekarang dengan benar mem-parsing peluncuran Yosemite $ soket jalur
2 DISPLAY 2) libGL telah diperbarui ke Mesa 10.4.4
3) Berbagai eksploitasi diperbaiki di xorg-server, freetype, dan libpng
4) Bug yang mencegah pembaruan otomatis dalam beberapa kasus memiliki telah diperbaiki
Laporan bug ditutup dan ditandai sebagai diperbaiki:
Jika Anda tidak dapat (atau tidak ingin) menginstal beta, Anda masih dapat menggunakan solusi yang saya jelaskan di bawah ini.
MENJAWAB
Analisis
(gulir ke bawah untuk bagian pemecahan masalah)
Pikiran pertama saya adalah " DISPLAY
variabelnya salah". Tapi ternyata tidak.
Ternyata, pada OS X 10.10 Yosemite (dan kembali ke 10.8 Mountain Lion ) DISPLAY
variabel menyimpan launchd
path socket:
/private/tmp/<socket name>
alih-alih nama tampilan yang dikenal:
hostname:displaynumber.screennumber
(Saya telah menambahkan beberapa informasi tentang hostname:displaynumber.screennumber
format pada akhir jawaban ini.)
Ini berarti bahwa xauth
harus mengetahui cara menangani inkarnasi khusus dari DISPLAY
variabel ini, dan seperti yang dilakukan Mavericks, memang demikian, tetapi soket yang digunakan di Yosemite memiliki jalur yang berbeda (lebih tepatnya: /private/tmp/com.apple.launchd.XXXX
alih-alih /private/tmp/launch-XXXX
), dan xauth
pecah.
Bug ini dilaporkan ke tim XQuartz pada 18 November 2014 (3 bulan lalu) ( http://xquartz.macosforge.org/trac/ticket/2068 ):
Program xauth memiliki kode di gethost.c dan parsedpy.c untuk mencari nama $ DISPLAY yang dimulai dengan "/ tmp / launch", dan memperlakukannya sebagai soket lokal. Namun, lokasi tampaknya telah berubah, $ DISPLAY sekarang dimulai dengan "/private/tmp/com.apple.launchd", sehingga kode yang mencari / tmp / launch tidak menangkapnya. (...)
Menurut deskripsi bug itu harus diselesaikan di XQuartz 2.7.8, yang terlambat 4 bulan (lihat halaman peta jalan proyek di http://xquartz.macosforge.org/trac/roadmap ).
Tambalan yang memperbaiki masalah ini dilakukan pada 31 Desember 2014 ke proyek freedesktop.org ( http://cgit.freedesktop.org/xorg/app/xauth/commit/parsedpy.c?id=f990dd936b5fd1a40290bb88cde517a0ac38f823 ):
diff --git a/parsedpy.c b/parsedpy.c
index c591b77..7365224 100644
--- a/parsedpy.c
+++ b/parsedpy.c
@@ -42,6 +42,9 @@ in this Software without prior written authorization from The Open Group.
#include <X11/Xauth.h> /* for FamilyLocal */
#include <X11/Xmu/SysUtil.h>
+#include <sys/stat.h>
+#include <sys/syslimits.h>
+
#if defined(UNIXCONN) || defined(LOCALCONN)
#define UNIX_CONNECTION "unix"
#define UNIX_CONNECTION_LENGTH 4
@@ -158,8 +161,32 @@ parse_displayname (const char *displayname,
if (!host) return False;
- if(strncmp (host, "/tmp/launch", 11) == 0) {
- family = FamilyLocal;
+ {
+ /*
+ * If using launchd socket, remove the screen number from the end
+ * of $DISPLAY and check if it is a path to a socket.
+ */
+ char path[PATH_MAX];
+ struct stat sbuf;
(...)
Jadi itu hanya masalah waktu sampai tambalan ini menemukan jalan ke rilis XQuartz berikutnya.
Penanganan masalah
(diuji pada OS X 10.10.2 Yosemite.)
Menambahkan:
alias ssh="ln -fs $(echo $DISPLAY | sed 's:\(/private/tmp/com\.apple\.launchd\.[^/]*\)/.*:\1:') $(echo $DISPLAY | sed 's:/private/tmp/com\.apple\.launchd\.\([^/]*\)/.*:/private/tmp/launch-\1:'); ssh"
untuk ~/.bashrc
dan memulai jendela Terminal baru atau sumbernya ( . ~/.bashrc
) di sesi Terminal Anda saat ini.
Alias ini pertama kali menghubungkan jalur soket ke /private/tmp/launch-XXX
(misalnya ln -fs /private/tmp/com.apple.launchd.GuewxwWwKS /private/tmp/launch-GuewxwWwKS
) dan kemudian mulai ssh
:
Bagi yang penasaran, secara tradisional, nama tampilan X server memiliki formulir ini (dari man X
pada Ubuntu): Nama tampilan X server memiliki formulir ini:
hostname:displaynumber.screennumber
dimana:
hostname
The hostname specifies the name of the machine to which the display is physically
connected. If the hostname is not given, the most efficient way of communicating
to a server on the same machine will be used.
displaynumber
The phrase "display" is usually used to refer to a collection of monitors that
share a common set of input devices (keyboard, mouse, tablet, etc.). Most worksta‐
tions tend to only have one display. Larger, multi-user systems, however, fre‐
quently have several displays so that more than one person can be doing graphics
work at once. To avoid confusion, each display on a machine is assigned a display
number (beginning at 0) when the X server for that display is started. The display
number must always be given in a display name.
screennumber
Some displays share their input devices among two or more monitors. These may be
configured as a single logical screen, which allows windows to move across screens,
or as individual screens, each with their own set of windows. If configured such
that each monitor has its own set of windows, each screen is assigned a screen num‐
ber (beginning at 0) when the X server for that display is started. If the screen
number is not given, screen 0 will be used.
$DISPLAY
salah. Seharusnya seperti itu:0.0
. Apakah Anda mengatur$DISPLAY
di~/.bash_profile
atau~/.profile
diri Anda sendiri?